書評「JavaによるRESTfulシステム構築」

監訳者のartonさんより「JavaによるRESTfulシステム構築」を献本いただきました。直接献本いただいたのはオライリーさんからですけども。
これは「RESTful Java With JAX-RS」という本の翻訳なわけですけど、こちらのタイトルからわかるとおりJAX-RS(JSR-311)の解説本です。何で邦題からJAX-RS抜いちゃったんだろ?


ところでJAX-RSというのは、JavaでRESTなWebサービスを構築するためのAPIなのだけど、これがかなり素敵です。
たとえば、こんな感じの名前と住所を保持するクラスを用意します。

package rest;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Customer {
    public String name;//名前
    public String address;//住所

    public Customer(String name, String address) {
        this.name = name;
        this.address = address;
    }
    public Customer(){}//デフォルトコンストラクタが必要
}

@XmlRootElementというJAXBのアノテーションをつけておきます。


で、これを扱うRESTful Webサービスのためのクラスとしてこんなのを作ります。

package rest;
import javax.ws.rs.*;

@Path("/customer")
public class CustmerResource {
    @GET
    @Path("{id}")
    @Produces("application/xml")
    public Customer getCustomer(@PathParam("id") int id){
        if(id == 1){
            return new Customer("きしだ", "ふくおか");
        }else{
            return new Customer("しらない", "しりません");
        }
    }
}

アノテーションを除けば、int型の引数をひとつとって、1だったら「きしだ/ふくおか」、それ以外だったら「しらない/しりません」を保持したCustomerオブジェクトを返すというだけのメソッドを持ったクラスです。


最後にJAX-RSを使うことを示すためのクラスを作ります。

package rest;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class ApplicationConfig extends Application {
}

ちなみに、NetBeansだと@PathのついたクラスのあるWebプロジェクトをデプロイしようとすると、JAX-RSの設定を行うためのダイアログがでて自動的に生成することができます。というか、生成できました。


で、これで「/rest/customer/1」というURLにアクセスすると次のようなXMLが返ってくるというわけです。

<customer>
  <name>きしだ</name>
  <address>ふくおか</address>
</customer>

もちろんXMLの形式はJAXBのアノテーションで細かく指定できます。


もう、RESTfulにするための処理を行うコードというのはまったく書かず、どのようにアクセスするのかを指定するだけでRESTfulなサービスというものができちゃいます。


と、こんなに素敵なJAX-RSを解説した日本語の本は、いまのところ「JavaによるRESTfulシステム構築」だけです。
しかも、原著者は、JAX-RSの実装やJSR-311の仕様策定にかかわった方とのことです。
巻末の「監訳者あとがき」のartonさんの言葉を借りると「本書を通じて最新のJava APIのデザインプロセスを裏側から実践的に学べ」るとのことです。ぼくはまだそこまで読み込んでませんが。


この本は、2部構成、全23章で、第15章からが第2部として14章までのサンプルプログラムをまとめたものになっています。そのため、第1部はサンプルコードを気にせずに読むことができます。サンプルコードが必要になったら第2部の該当する章を読むといいです。これは自然に対象がJavaをある程度わかる人となっているからできる構成だと思いますが、手早くもじっくりも読めてとてもいいです。
ただ、Amazonの目次がよろしくないので、そこは改善したほうがいいんじゃないでしょうか。


もちろん内容も、RESTとは何かからJAX-RSの仕様、実装、そしてサンプルコードまで、充実しているので、JAX-RSを学ぶにはとてもよい本だといえます。


JavaでRESTをやろうとするとJAX-RSがとてもよい→JAX-RSをやるには本書がとてもよい」ということから、JavaでRESTをやろうとすると本書がとてもよいということになります。
まずはJAX-RSを試してみて、これはいいと思ったら、そしてきっとこれはいいと思うので、深く勉強するために本書を手にとってみるといいんじゃないでしょうか。
あとJAX-RS試すのにNetBeansはちょうオススメです。

JavaによるRESTfulシステム構築

JavaによるRESTfulシステム構築


追記:
この本のほんとの良さは、artonさん本人のエントリを見たほうがわかりやすいです。
http://www.artonx.org/diary/20100810.html#p01
「複雑な障害が起きるところでは、システムはできるだけシンプルに保つべきではないか?」というところは重要です。