「Java による RESTful システム構築」 が超勉強になる!!

JavaによるRESTfulシステム構築

JavaによるRESTfulシステム構築

これ,本当にタイトル勿体無いなぁって思う本でした.
いや,タイトルに偽りは無いんだけど,これだと REST に興味無い人は手に取らないだろうなぁと思って,それは凄く勿体無い内容なので,ホントみんな読むと良いと思う.


簡単に説明すると,Java で REST を扱うために JAX-RS という API があるんだけど( JSR311 ),そのエキスパートグループの一人であり,さらにその実装である RESTEasy の作者が書いている本です.


で,この人は元々 SOAP とかのどちらかというと Fat な仕様大好きっこだったので,この本には色々な側面がある.

  • (SOAP などをバリバリにやっていた人の意見も含め)REST 自体の説明
  • (JSR311 のエキスパートグループの一人として)Java のコミュニティの REST に対する一つの考え方
  • (上記と同じく)JAX-RS の仕様と使い方
  • (RESTEasy のコミッタとして)最新の Java 仕様をふんだんに使ったフレームワークの作り方

などなど、RESTful に収まらない内容でギッシリだ.


さらに 1 部と 2 部にわかれていて,1 部ではどちらかと言うと仕様に重きを置いた説明, 2 部では 1 部で断片的に説明したサンプルコードをもっと深く説明している.
初めて JAX-RS や REST を触る人は 1部を読み,実際にコーディングするようになったら さらに 2 部に細かな情報がある(アプリケーションコンテナ毎にどのようにしたらよいのかも含めて)のでホントにこれ一冊で RESTful なアプリケーションが作れる.

また,DI ブーム後のそれが当たり前になった Java で最新の仕様を駆使して書かれたフレームワークは普段のアプリケーションの設計にも凄く訳に立つ.
たとえば僕が感動した一例を上げると
@GET
というアノテーションがある.
これは,指定したアドレスに GET メソッドでアクセスがあった時に呼ばれるようにするアノテーションなんだけど,実装ではメタアノテーションという形を取っている.
どういう事かと言うとこの GET というアノテーションフレームワークがそのまま使うのでは無く
そこにさらに HttpMethod というアノテーションが付いている.

……
@HttpMethod(HttpMethod.GET)
public @interface GET{
}
……

みたいになってるので,
新しい独自なメソッドを追加する時にフレームワークソースコードに手を入れる事なく

……
@HttpMethod("LOCK")
public @interface LOCK{
}
……

みたいに追加出来る.
Java の考え方で大事な型の堅固さと拡張性の両方を持たせたテクニックで超良いなぁって思った.

他にも型変換で valueOf() メソッドを使うところとか,超クールだと思った(それだけで対応できるラッパークラスが増えるし,enum などにも対応できるし,独自クラスでもそのメソッド作れば良いだけだし)
こういう Java5 以降のテクニックがふんだんに含まれていて REST 関係無くメチャメチャ勉強になる.


また,REST の設計でも仕様だけでは対応出来ない事にもちゃんとどうやって考えれば良いかがのってる.
例えばショッピングサイトを作る時に注文のキャンセルをどうするか,DELETE メソッドにキャンセルの機能をマッピングするのは本当にデータを消すのではないので違うよねとか(作者の答は本書に書かれているので是非読んでね!!)


また,JAX-RS の仕様に今は入ってなくてイケてないのはこうやれば対応できるけど,エキスパートグループもそこを認識してるから次で仕様に入ると思うよとかそういった事まで正直に書かれているので勉強になる.


僕はフレームワークを使うときにそのフレームワークを習得するのに一番の近道はそのフレームワークがどんな思想で作られたのかを知るのかが一番だと思うんだけど,それが全部日本語で説明されてるっていうのは凄く幸せだと思う.それはソースコード読み込んだり API を見たりすればわかるかもしれないけど,コードの行間にある思想なども書かれていて面白いし勉強になる.

というわけで,REST に興味のある人はもちろん,興味が無くても Java5 以降でアプリケーション書いている人は是非読むべきだと思います.
マジで面白いので!!


僕が信用出来ない人は arton さんの文章も読んでみてください!!
http://www.artonx.org/diary/20100810.html#p01
ホント面白いし良書なのです!!