Redmine REST api を触ってみた。

ざっくりとした紹介はこの辺参照。

http://www.redmine.org/wiki/redmine/Rest_api

とりあえず、svnからtrunkの現時点での最新リビジョンをチェックアウトして使用する。
そもそもRubyもRorも触ったことが無かったので、以下のサイトとredmine.jpを参照しながらローカル環境にRedmineをインストールした。

http://www012.upp.so-net.ne.jp/tanuki-project/install_redmine.html

REST APIを有効にする

管理者としてログインし、Redmineメニューから「管理」をクリック。
メニューから「設定」を選択し、「認証」タブを選択。

RESTによるWebサービスを有効にする

というチェックボックスが表示されるので、チェックを入れる。

認証について

Wikiにはまだドキュメント化されていない様子。
とりあえず以下のチケットを参照してみる。

"REST API for authentication"
http://www.redmine.org/issues/3920

キーパラメーターを使用する認証方式とHttp Basic認証を使用する方法があるようだ。
今回はキーパラメーターを使用して認証をしてみる。

キーの取得方法

Redmineメニューから「個人設定」画面へジャンプ。REST APIが有効になっていれば画面右側に「APIアクセスキー」という項目が出ているはず。「表示」をクリックし、表示されるアクセスキーをどこかにコピーしておく。

チケットの取得

FirefoxプラグインRESTTestを使用してアクセスを行う。とりあえず、getメソッドで

http://localhost:3000/issues.xml?key=[上で取得したキーの値]

http://localhost:3000/issues.xml?key=172ddd48a7a6d5cd5cedd9f3a8c03ca4ac39ce11

へアクセスすると、チケット内容を表すXMLデータが戻る。レスポンスXMLの書式についてはこちらを参照。

未完了のチケットのみを取得するURL

http://localhost:3000/issues.xml?status_id=open

完了済みチケットのみを取得するURL

http://localhost:3000/issues.xml?status_id=closed

チケットの更新

既存のチケットに対してhttp putメソッドで更新済みxmlデータを送信すればOK・・・・なはずなんだが・・・・。要素(redmine上で「作業時間の記録」として表示される値)だけがどうやっても更新できない。
どうも、チケット情報の保存先DBテーブル(issues)と経過時間の保存先DBテーブル(time_entries)が異なるため、現状のREST APIでは更新されないっぽい。
この辺を解決するにはソースに手を入れるしか無いようだが、Ruby+Rorを本格的にかじる必要が有りそうだなあ。さっくり解決できないかねえ。