scalaj-httpをforkした

httpzという名前の、Scalaz使った純粋関数型なhttpクライアントライブラリ作ってるのは、何回も書いてますが

Scalaでoperational monad使ってgithubのAPI client書いてリリースした
httpzというAPIクライアントライブラリを作るためのライブラリを作った

それに関係するのだけれど、まぁhttpz関係しなくても単体でも使えるものをforkしてリリースした。


scalaj-httpはわりとシンプルで気に入ってるので、それなりに使ってるのですが、ちょっとした不満もあります。
で、なぜforkしたのか、forkした際の変更点が以下

  • Google App Engine上でも使いたかった
    • そのためには、リフレクションとProxyクラス参照してるのが邪魔
    • Proxy使う予定ないから、その部分のコード削ろう!
    • リフレクション使ってる箇所は2点
      • 無理やり対応してる以外のhttpメソッドをリフレクション経由でsetするため
      • Java6とJava7で互換性持たせるために、Java7にしか存在しないメソッドを一旦リフレクション経由で呼び出し、存在しなかったらJava6の方式で呼び出し
    • 「 無理やり対応してる以外のhttpメソッドをリフレクション経由でset」は削除
    • Java6サポートを切って、Java7以上にしか存在しないメソッドを直接素直に呼び出し
  • Scalaj-httpのScala2.11サポートが少し遅い
  • コード量すくないし、このくらいなら、本家の便利そうな変更は取り入れつつ、自分でメンテできるか
  • scalaxmlの依存を切った
  • 昨日ちょうど話題になっていた、「デフォルトのタイムアウト時間が短すぎる問題」を修正


実際のdiff ↓


https://github.com/xuwei-k/httpz/commit/7672c1f8e78097296


で、それを使ったhttpzをリリースしました。

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

最初にも書いたけど、httpzと完全に独立したモジュールとしてもリリースしてるので、普通のhttpクライアントライブラリとしても使えます。


これで実質httpzのscalaj-httpモジュールあまり必要なくなったし、scalaj-httpのScala2.11対応版がもう少し待ってもでないなら、scalaj-httpのモジュール消そうかなぁーなどと考えてる。


forkしたものは、もうちょっと関数型っぽく使いやすいものが思いついたときに、少しずつ改造するかもしれない。