操作
使用Ruby的REST API¶
Redmine REST API遵循Rails的RESTful约定,因此与ActiveResource一起使用非常简单。
ActiveResource (Rails)¶
在Redmine 3.x (Rails 4.2)中,您需要添加'activeresource'宝石。
例如,在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次修订