httpzというAPIクライアントライブラリを作るためのライブラリを作った

https://github.com/xuwei-k/httpz

zというのは、特にいい名前思いつかなかったので、Scalaz的にとりあえずz付けておけばいいか、とかそういうノリです。


もともと何回かblogに書いたgithubAPI clientライブラリ

ghscala 0.2.5 リリース
ScalaでOperational Monadを使って作ったAPI clientの内部実装の解説

を、抽象化というか汎用的にしていったら
「あれ、これgithub apiに依存する部分のほうが少ないし、切り離せるのでは?」
と思いつき、リポジトリ分けました。ghscalaは、httpzに依存する形にしました。

単なる「httpクライアントライブラリ」ではなく「APIクライアントライブラリを作るためのライブラリ」と言ったのは、そもそもこれのコア部分にはhttpのリクエストを実際に処理するコードがありません。抽象的で汎用的なActionの合成の仕組みを提供するだけです。そのあたりは、以前のghscalaのときのblogにも書きましたが。
説明しづらいのですが、とにかく単なるhttpクライアントライブラリとは異なるものです。


さてhttpz使うと、なんでもいいですが例えば「twitterAPIクライアント」「FacebookAPIクライアント」などが

  • ScalazのOperational Monadを使った、純粋関数型で
  • Action同士が簡単に合成できて
  • なおかつ、以前書いたように、エラー蓄積やFutureによる並列実行が簡単に選べる

などといった特徴をもった、APIクライアントライブラリがある程度簡単に作れます。ただ、まだ色々足りないので、httpの細かいオプションが指定できなかったり、httpのメソッドも全部に対応していなかったりします。最近出来る限り対応しました。

そのあたり含めた細かい部分は(自分で必要になったときに?)ゆっくり追加していくつもりです。もしくは誰か気が向いたらpull reqください。
あと、jsonにしか対応してません。xmlとかは無理ですし、たぶん今後対応する予定もありません。少し頑張れば(?)ある程度Json以外も対応できるようにもしました。


ghscalaの開発も地味に続けるつもりですが、個人的にはちょっと飽きた部分もあるので、なにかDropboxとか他のAPIクライアント作ってみようかなーとか考えてます。基本的にはそうやって自分がgithub api client以外を作るかもしれないので切り離しましたが、もしこれ読んでる人で、httpz使ってなにかのAPIクライアント作ってみたいという人がいたら、作ってみてフィードバックください。