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サポートが少し遅い
- コード量すくないし、このくらいなら、本家の便利そうな変更は取り入れつつ、自分でメンテできるか
- scalaのxmlの依存を切った
- 昨日ちょうど話題になっていた、「デフォルトのタイムアウト時間が短すぎる問題」を修正
@seratch_ja デフォルトの時間制限厳しすぎて、変更しないといけないのは、scalaj-http使う人みんなが必ず最初にハマる罠です
2014-04-24 14:25:43 via web to @seratch_ja
実際の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したものは、もうちょっと関数型っぽく使いやすいものが思いついたときに、少しずつ改造するかもしれない。