動作
使用 Ruby 操作 REST API¶
Redmine REST API 遵循 Rails 的 RESTful 慣例,因此使用 ActiveResource 相當簡單。
ActiveResource (Rails)¶
在 Redmine 3.x (Rails 4.2) 上,您需要添加 'activeresource' gem。
例如,在 Gemfile.local
gem 'activeresource'
以下是一個簡單的 Ruby 腳本,示範如何使用 Redmine REST API
require 'rubygems' require 'active_resource' # Issue model on the client side class Issue < ActiveResource::Base self.site = 'http://redmine.server/' self.user = 'foo' self.password = 'bar' # Or you can use the Redmine-API key # self.headers['X-Redmine-API-Key'] = 'baz' end if false # Retrieving issues issues = Issue.find(:all) puts issues.first.subject end # Retrieving an issue issue = Issue.find(1) puts issue.description puts issue.author.name # Creating an issue issue = Issue.new( :subject => 'REST API', :assigned_to_id => 1, :project_id => 1 # custom field with id=2 exist in database :custom_fields => [{id: 2, value: "IT"}] ) if issue.save puts issue.id else puts issue.errors.full_messages end # Updating an issue issue = Issue.find(1) issue.subject = 'REST API' issue.save # Deleting an issue issue = Issue.find(1) #issue.destroy
您可能需要在 ActiveResource 類別中設置 include_root_in_json = true
純 Ruby(僅使用 Ruby 核心)¶
以下是如何使用 net/http
PUT 請求將議題 #9599 的狀態設置為內部狀態 ID 1 的範例
require 'net/https'
require 'uri'
require 'json'
def update_issue_status issue_id, new_status_id, change_note
base_url = "https://your.redmine.example.com"
api_token = "xxxxxxxxxxxxxxx"
payload = {
issue: {
notes: change_note,
status_id: new_status_id
}
}
url = "#{base_url}/issues/#{issue_id}.json"
uri = URI.parse(url)
req = Net::HTTP::Put.new(uri.request_uri)
req["Content-Type"] = "application/json"
req['X-Redmine-API-Key'] = api_token
req.body = payload.to_json
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.request(req)
return response
end
# Set Status of issue #9599 to internal status_id = 1
response = update_issue_status 9599, 1, "Changed Issue Status via REST-API"
由 James Patrick 於 大約 7 年前 更新 · 15 個修訂