Scalaでoperational monad使ってgithubのAPI client書いてリリースした

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

  • sonatype経由でmaven centralにsyncしてあるので、githubに書いてあるREADMEの通りにlibraryDependenciesを追加するだけで使えるはずです
  • とても昔にlift-jsonとscalaj-http使って書いたものがあって、(modelのclassだけ再利用して)その他は全面的に書き直した
  • lift-jsonやめた
    • 定義は楽だが、modelへのマッピングにreflection使っていて、型安全じゃなかった(?)ので。*1
    • 型安全かどうか?というか、マッピングに失敗した場合のエラーハンドリングとかが微妙になるし
    • あとscala-compilerに依存することになるデメリットとか
  • かわりにargonaut https://github.com/argonaut-io/argonaut/ という、Scalazに依存してるより関数型なjson library使うことにした。lift-jsonやめたのは、とにかくargonaut使ってみたかっただけ(argonautはScalazとの相性もいいし)
  • これ書いてるversion0.2.0の時点では、argonautに依存する関係でScalaz7.1.0-M3という中途半端なscalazのversionに依存してる*2
  • 参照系の代表的なAPIしか実装してない
  • 今後その他のAPIをどのくらい実装するかはやる気しだい・・・
  • 認証系の機能実装してないので、デフォルトではすぐlate limitに達する
  • githubAPIは、今のところBasic認証も使えるらしいので、とりあえずそれで
  • というわけで、機能面ではまだまだなので、現状ではそれほど真面目に実用するのはあれですよ。
  • operational monadをどのように利用したか?利用してみてどう便利だったか?などの、肝心の内部実装の話は、気が向いたら後で別に書く 書きました http://d.hatena.ne.jp/xuwei/20140302/1393698475

*1:かなり昔に書いたこれ http://d.hatena.ne.jp/xuwei/20120104/1325635980

*2:なので、Coyonedaはscalaz本体に入ってない(scalaz7.1.0-M5から)ので、必要な部分だけコピペしていれてあります・・・