読んだ: 『Java による RESTful システム構築』
- 作者: Bill Burke,arton,菅野良二
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/08/23
- メディア: 大型本
- 購入: 28人 クリック: 804回
- この商品を含むブログ (39件) を見る
タイトルからはわかりませんが、JAX-RS について書かれた書籍です。 著者の Bill Burke さんは、JAX-RS 仕様の策定や JAX-RS 実装 RESTEasy の開発に関わっている人です。
さすがに仕様策定や実装の開発に関わっている人が書いているだけあって、JAX-RS についての重要なことがらがわかりやすくまとまっていました。 JAX-RS について学ぶのであればまず本書を読むのが一番だと思います。
JAX-RS について
JAX-RS というのは、RESTful サービスを構築するための Java の API 仕様です (JSR 339)。 JAX-RS より前の Java での web アプリケーション開発といえばサーブレットがなじみ深いですが、サーブレットを使う場合は HTTP リクエストやレスポンスとのやり取りが煩雑になりがちでした。 そこで、RESTful サービスの実装を簡素化するために JAX-RS 仕様が定義されたそうです。
本書では、JAX-RS について以下のように説明されています。
JAX-RS は、プレーン (普通の) Java オブジェクトに対する Java アノテーションの適用に特化したフレームワークである。 JAX-RS には、特定の URI パターンと HTTP 操作を Java クラスの個々のメソッドにバインドするためのアノテーションが用意されている。 HTTP リクエストから情報を容易に引き出せるようにパラメータインジェクションアノテーションが用意されている。 また、自作の Java データオブジェクトからデータフォーマットのマーシャリングおよびアンマーシャリングを分離するためにメッセージボディのリーダーとライターが用意されている。 ...
「アノテーション」 が重要なキーワードで、受け取った HTTP リクエストの URI やリクエストメソッドに応じて実際に呼び出されるメソッドがどのクラスのどのメソッドなのかを、アノテーションを用いて宣言的に記述するようになっています。
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; @Path("/user") public class UserResource { @GET @Path("{id}") @Produces("application/json") public Response getUser(@PathParam("id") int id) { // ... 処理 ... } }
上の例は、/user/324 みたいなパスに対する GET リクエストを受け取るメソッドの宣言です。 パスに含まれるユーザー ID の部分を、メソッドの引数として int 型で受け取れるようになっています。
ルーティングの処理 *1 や、HTTP リクエストからの値の取り出し、HTTP レスポンスの構成といった部分が JAX-RS の担当範囲だと言えるでしょう *2。
JAXB の組み込みサポート
HTTP レスポンスのボディとして XML や JSON を返したいことが多々あります。 JAX-RS には組み込みの JAXB サポートがあり、単に特定の形式の Java オブジェクト (Java Bean) をレスポンスとして指定するだけで、自動的に XML や JSON に変換してくれます。
JAXB というのは JAX-RS 以前から存在する Java のアノテーションフレームワーク仕様で、Java クラスを XML や XML スキーマにマッピングするものです。 JAXB には XML 以外のフォーマットをサポートする柔軟性があって、アダプタによって JSON などもサポートされているようです。 本書では、詳細には立ち入らないものの、JAX-RS を使う際に必要そうな JAXB についての説明もある程度なされています。
本書を読むための前提知識
なんとなくタイトルからは 「Java さえ書ければ本書を読めば RESTful サービスが作れそう」 という印象を受けますが、実際のところは Java を書けるというだけでは知らないであろう単語が随所に出てきて、難易度は高めだと感じました。 具体的には 「サーブレットコンテナ」 とか 「JavaBeans」 などです。
もちろんそれらを詳しく知らないと読み進められないわけではないので、調べながら読むとか、使ったことはなくても大体どんなものかは知っているという状態で読むのであれば大丈夫だとは思いますが、Java のサーブレット周りの知識を全然持っていない人が 「これさえ読めば web サービスを作れるようになる!」 みたいな気持ちで本書を読むと挫折するような気がします。
本書の感想
JAX-RS の説明に関しては、本書はわかりやすく非常に良かったと思います。 単に仕様を説明するだけではなく、どういう思想でこうなっているのかなども説明されたりしていて、そのような点も理解の助けになりました。
一方で、上にも書いたように Java のエンタープライズ系 (?) の人を主な対象読者としているようで、そこら辺の知識がない私にとっては、少しハードルが高かったなーという印象です。 それでも本書を読んで Java で簡単な web サービスを作れるようにはなったので、Java で web サービスを作りたい人には本書をおすすめします!
関連記事
本書の書評。 一番上は監訳者の arton さん。