專案

一般

個人檔案

動作

使用 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 個修訂