プロジェクト

全般

プロフィール

Redmine REST API » 履歴 » バージョン 4

Mitsuyoshi Yoshida, 2011/11/13 12:11

1 2 Mitsuyoshi Yoshida
redmine.org の "Redmine API":http://www.redmine.org/projects/redmine/wiki/Rest_api の日本語訳です。
2
3
{{>toc}}
4
5
h1. Redmine REST API
6
7 1 Mitsuyoshi Yoshida
Redmine では REST API が提供されています。 
8
この API を使って Redmine 上のデータにアクセスすることができ、 CRUD(Create, Read, Update, Delete) と呼ばれる 作成、読み取り、更新、削除 といった基本的な操作を行うことが出来ます。
9
API が用意されているデータには以下の表のものがあります。 
10
11
|_. データ                        |_.ステータス |_.注意点  |_.Redmine バージョン|
12
|[[Rest_Issues|チケット]]         | Beta  | 荒削りの段階でまだバグが残っています  | 1.0 |
13
|[[Rest_Projects|プロジェクト]]   | Beta  | 荒削りの段階でまだバグが残っています  | 1.0 |
14
|[[Rest_Users|ユーザー]]          | Beta  | | 1.1 |
15
|[[Rest_TimeEntries|作業時間]]    | Beta  | | 1.1 |
16
|[[Rest_News|News]]               | Prototype | @index@ だけの試験的な実装です | 1.1 |
17
|[[Rest_IssueRelations|Issue Relations]] | Alpha | | 1.3 |
18
|[[Rest_Versions|Versions]]       | Alpha | | 1.3 |
19
|[[Rest_Queries|Queries]]         | Alpha | | 1.3 |
20
|[[Rest_Attachments|Attachments]] | Alpha | | 1.3 |
21
22
ステータスの凡例 :
23
24
* Stable - 仕様機能は完成されていて、今後の大きな変更は予定されていません。
25
* Beta   - まだバグが残っているか、いくつかの細かな機能が実装されていません。
26
* Alpha  - 主要な機能は出来てますが、まだ API 使用者からのフィードバッグを必要としています。
27
* Prototype - 試験的な運用のためにざっと実装されただけで、今後大きな変更が加わる可能性があります。 *本格的に使用するのはお勧めできません*
28
* Planned - 将来のバージョンで予定されているもので、いつになるかは開発参加者によって変わってきます。
29
30
31
h2. 各データ共通
32
33
h3. ユーザー認証
34
35
ほとんどの場合、 API では認証を必要とします。
36
37
API 型式での認証を可能にするためには 
38
_管理_ → _設定_ → _認証_ の順で設定ページを表示した後、
39
*[REST による Web サービスを有効にする]* にチェックを入れます。
40
41
!auth_settings.png!
42
43 4 Mitsuyoshi Yoshida
そうすると普段のログイン名とパスワードを使用した HTTP 認証方法の他に API キーを使った認証が利用できるようになります。 API キーを使うとスクリプト中にパスワードの記述を避けることが簡単に出来ます。
44 1 Mitsuyoshi Yoshida
45
次の方法で各リクエストに対して API キーを付けることが可能です。
46 3 Mitsuyoshi Yoshida
47 1 Mitsuyoshi Yoshida
* "key" パラメーター
48
* 基本的な HTTP 認証でのランダムなパスワードのユーザー
49
* "X-Redmine-API-Key" の HTTP ヘッダ (Redmine 1.1.0 で追加)
50
51
自分の API キーを知りたい場合には、ログイン後、 [個人設定](/my/account)ページを開き、ページの右側(デフォルトテーマの場合)を見て下さい。
52
53
!api_key.png!
54
55
56
h3. データリストの取得とページ割り
57
58
データリストを取得する GET リクエスト(@/issues.xml@, @/users.xml@ など)では、通常データベース内の利用可能な全てのデータが一度に返ってくるわけではありません。
59
Redmine のバージョン 1.1.0 以降ではデータを要求する各リクエストに対して次のパラメータが共通して使用できるようになっています。
60
61
* @offset@: データ取得の開始位置
62
* @limit@: 取得するデータ数 (デフォルトは 25 で、 最大が 100)
63
64
@offset@ の代わりに、 @limit@ と併用して @page@ パラメーターを使用することも出来ます。 
65
66
+例+:
67
68
<pre>
69
GET /issues.xml
70
=> 最初の 25 チケットが返ってきます
71
72
GET /issues.xml?limit=100
73
=> 最初の 100 チケットが返ってきます
74
75
GET /issues.xml?offset=30&limit=10
76
=> 30 番目からの 10 チケットが返ってきます
77
78
GET /issues.xml?page=3&limit=10
79
=> 前のリクエストと同じです
80
</pre>
81
82
データ一覧の GET リクエストから返ってくるレスポンス情報の中には利用可能な全データの要素数や使用した @offset/limit@ の値が含まれています。
83
+例(XML)+:
84
<pre>
85
GET /issues.xml
86
</pre><pre><code class="xml">
87
<issues type="array" total_count="2595" limit="25" offset="0">
88
  ...
89
</issues>
90
</code></pre>
91
92
+例(JSON)+:
93
94
<pre>
95
GET /issues.json
96
</pre><pre><code class="json">
97
{ "issues":[...], "total_count":2595, "limit":25, "offset":0 }
98
</code></pre>
99
100
*注意*: トップレベルにある total_count, limit, offset といった属性に対して、使用している REST クライアントが対応していない場合には @nometa@ パラメーターか @X-Redmine-Nometa@ の HTTP ヘッダのどちらかを設定すれば、属性を除いた応答が返ってきます。
101
102
<pre>
103
GET /issues.xml?nometa=1
104
</pre><pre><code class="xml">
105
<issues type="array">
106
  ...
107
</issues>
108
</code></pre>
109
110
111
h3. 関連データの取得
112
113
バージョン 1.1.0 以降、関連データを含んだ検索結果を得たい場合には、 URL に @include@ パラメーターを付けて、明示的に指定する必要があります。
114
115
+例+: チケット履歴(journals)の記述を取得
116
117
<pre>
118
GET /issues/296.xml?include=journals
119
</pre><pre><code class="xml">
120
<issue>
121
  <id>296</id>
122
  ...
123
  <journals type="array">
124
  ...
125
  </journals>
126
</issue>
127
</code></pre>
128
129
複数の関連データを得たい場合にはカンマで区切って指定します。
130
131
+例+:
132
133
<pre>
134
GET /issues/296.xml?include=journals,changesets
135
</pre><pre><code class="xml">
136
<issue>
137
  <id>296</id>
138
  ...
139
  <journals type="array">
140
  ...
141
  </journals>
142
  <changesets type="array">
143
  ...
144
  </changesets>
145
</issue>
146
</code></pre>
147
148
149
h3. カスタムフィールドがある場合
150
151
Redmine のほとんどのデータではカスタムフィールドを使用することが出来ます。
152
このカスタムフィールドの値は @custom_fields@ 要素に記述されています。
153
154
+例(XML)+:
155
156
<pre>
157
GET /issues/296.xml      # an issue with 2 custom fields
158
</pre><pre><code class="xml">
159
<issue>
160
  <id>296</id>
161
  ...
162
  <custom_fields type="array">
163
    <custom_field name="Affected version" id="1">
164
      <value>1.0.1</value>
165
    </custom_field>
166
    <custom_field name="Resolution" id="2">
167
      <value>Fixed</value>
168
    </custom_field>
169
  </custom_fields>
170
</issue>
171
</code></pre>
172
173
+例(JSON)+:
174
175
<pre>
176
GET /issues/296.json      # an issue with 2 custom fields
177
</pre><pre><code class="json">
178
{"issue":
179
  {
180
    "id":8471,
181
    ...
182
    "custom_fields":
183
      [
184
        {"value":"1.0.1","name":"Affected version","id":1},
185
        {"value":"Fixed","name":"Resolution","id":2}
186
      ]
187
  }
188
}
189
</code></pre>
190
191
データの作成や更新時にカスタムフィールドの値も一緒に設定や変更をしたい場合には、どちらも同じ文法で記述できます(カスタムフィールドの名前を必要としない場合を除く)。
192
193
+例(XML)+:
194
195
<pre>
196
PUT /issues/296.xml
197
</pre><pre><code class="xml">
198
<issue>
199
  <subject>Updating custom fields of an issue</subject>
200
  ...
201
  <custom_fields type="array">
202
    <custom_field id="1">
203
      <value>1.0.2</value>
204
    </custom_field>
205
    <custom_field id="2">
206
      <value>Invalid</value>
207
    </custom_field>
208
  </custom_fields>
209
</issue>
210
</code></pre>
211
212
*注意*: @custom_fields@ の XML タグにある @type="array"@ 属性は必ず付ける必要があります。
213
214
215
+例(JSON)+:
216
217
<pre>
218
PUT /issues/296.json
219
</pre><pre><code class="json">
220
{"issue":
221
  {
222
    "subject":"Updating custom fields of an issue",
223
    ...
224
    "custom_fields":
225
      [
226
        {"value":"1.0.2","id":1},
227
        {"value":"Invalid","id":2}
228
      ]
229
  }
230
}
231
</code></pre>
232
233
234
h2. 種々の言語やツールでの API の使用法
235
236
* [[Rest_api_with_ruby|Ruby]]
237
* [[Rest_api_with_php|PHP]]
238
* [[Rest_api_with_python|Python]]
239
* [[Rest_api_with_java|Java]]
240
* [[Rest_api_with_curl|cURL]]
241
* "Drupal Redmine API module, 2.x branch (currently not stable)":http://drupal.org/project/redmine
242
* [[Rest_api_with_csharp|.NET]]
243
* [[Rest_api_with_delphi|Delphi]]