2011-12-01

RedmineのREST APIを使ってみる。

いまごろではありますが、主に使っているRedmineのバージョンが上がったので、やっとREST APIが使える環境になりました。
#個人的にREST APIを使ったツールを作ってみる活動はしていたのですが、メインの環境では対応していなかったのもあって、モチベーションが続いてませんでした…。

できれば周りにも利用したり、応用したり、良いアイディアを出してもらいたいなあと思ったので、まずはどんな感じで使えるか、というサンプルを作ることにしました。

* * *

チケットの参照はWebから行うことの方が多いので、やっぱりチケットを作るサンプルから。

参考にさせていただいたREST APIについての記述は、Redmine本家と、r-labsのサイトの日本語訳になります。(ありがとうございます!)

動作確認は、daipresentsさんの記事を参考にさせていただきました。こちらもありがとうございます!

daipresentsさんの記事では、RESTを試すクライアントとして、RESTClient を使われていました。こちらは使ったことが無かったので、ダウンロードしてみたところ、なるほど、これも便利でした。
わたしの場合は、いつもはFiddler2 を使っているので、参考までにFiddler2でのスクリーンショットを載せておきます。

1枚目がPOSTメソッドでリクエストを生成するところ。2枚目がレスポンスの画面です。
うまくチケットが出来ると、Status Code 201が返ってきます。また、レスポンス本文にも、チケットのIDを含めたXMLが返ってきます。

fiddler-request

fiddler-result

動作確認ができたので、じゃあ、チケットを作成するプログラムを…と思ったのですが、RubyやPerl, Pythonといったライブラリの組み込み状況は、サーバの環境によってまちまち。Perlしか入れていないところもあります。

現在のチケット作成のAPIは、添付ファイル付きでの作成が出来ず、結局のところXMLをPOSTすることになるので、シンプル?に、curlとShellを使ったスクリプトを作ることにしました。

チケット作成がメインで、Statusの指定やカテゴリの指定は重視していなかったので、オプション設定は行っていません。Shellを参考にカスタマイズすれば、Updateやカテゴリ設定も可能かと思います。(実はまだUpdateは試してないので、できたらまた追記します)

使い方は、このような感じです。

$redmine_postIssue.sh –u REDMINEのURL –k APIキー \
   –p プロジェクトID(番号じゃなく識別子)  \
  -t トラッカーID(番号) –s タイトル \
  -d チケット本文

チケット作成時に、作成者を別途指定できたり、担当者も指定できます。ただ、やっぱり担当者とかトラッカーとかのIDをきちんと知っていないといけません。

APIを使ってリッチなクライアントを作るって、凄いなあと思っています(^^;

2 件のコメント:

  1. 大変すばらしいツールで当方のCIに利用させていただいております。

    しかしながら、残念なことに、debian6,debian7の環境ではチケット本文に改行コードを混ぜることができませんでした。

    この原因はcurlコマンドで-dオプションを使用しているからだと思います。
    このオプションの場合、改行文字をとりのぞいてしまいます。

    すくなくとも、私の環境では--data-binaryオプションに置き換えることで期待通り動作しました。

    以上報告まで。

    返信削除
    返信
    1. 板垣さま、初めまして、こんにちは!
      コメントありがとうございます!

      debianでは検証していなかったのですが、上記ツールを実行する (curlを実行する)サーバがdebianということですね。
      スクリプトの注意書きにも、作者の想定環境を明記しておきますね。
      また、問題がないようなら、--data-binaryオプションへの切り替えを実施してみます。

      ありがとうございました!

      削除