bouzuya.hatenablog.com

ぼうずやのにっき

Backlog API wrapper for Node.jsを0.2.0にした

Backlog API wrapper for Node.js(bouzuya/node-backlog-api)を0.2.0にした。0.1.1から0.2.0にバージョンアップした。

インストールはnpm install backlog-apiで良い。

主な変更は、次のとおり。

  • 引数の指定方法を変更
  • 引数のバリデーションを追加
  • backlog.findIssueのサポートを追加

引数の指定方法を変更した。0.1.1とは互換性がなくなっているので注意が必要である。引数なしの場合は以前と同様だけれど、引数ありの場合に異なる。第一引数は常にobjectを指定する。

例えば、getProjectの第一引数はリクエストXML上はstructでないため、backlog.getProject(projectId, function(err, project) { ... });と指定する以前の形で良いのだけれど、変更後はbacklog.getProject({ projectId: projectId }, function(err, project) { ... });となる。これだけ見ると長くなって改悪ぽいけど、一貫性のためにこうした方が良い。よりリファレンスに近い形で指定できる。リクエストXMLを意識するのではなく、メソッド名とパラメータ名と値で十分になる。

引数のバリデーションを追加した。必須のパラメーターについてはバリデーションが追加されているため、指定していない場合にBacklogからではなくライブラリからエラーを返す。型チェックはないけれど、そこまで厳密でなくても良いかなと。

最後にbacklog.findIssueのサポートを追加した。サポートの追加は単純作業なので、そんなに大変ではない。一気に増やすと、内部構造を変えたときに二度手間なので、様子を見ながら増やしている。findIssueが欲しかったのは、順番的なものと、hubotからの呼び出しに使いたかったから。

外見の変化は以上。

中身としては、メソッドを個別に作成するのではなく、宣言的にメソッドを書いておいて、それらを最後にBacklog.prototypeに追加するような仕組みを追加した。宣言的に書いておく分もファイルごとに分離した。あとは作業かなあ。

次はテストコードをもうすこし良いものにしておきたい。実際にサービスを呼び出しているため、1ケース1秒くらいかかるし、今後追加する更新系のAPIを呼び出すとややこしくなるからだ。

ちなみに、今回の変更を使ってbouzuya/hubot-backlogを書いた。プロジェクトと未完の課題とを取得できるようにしている。hubot-scriptsに慣れる意味合いもあるので、恐々書いている。hubot側のデプロイを容易にしたりもしないとなあ。

まとめると、課題は次のとおり。

  • 残りのAPIの実装
  • テストコードにモックを使う(更新系APIの対策)
  • hubot-scriptsのデプロイを容易にする

さてさて、どうなんでしょうね。

45 min.