Java EE 7徹底入門を読んだ(JAX-RSあたり)

次はJSFを読むと約束したな。あれは嘘だ。

JAX-RSは9章ですね。

RESTとSOAPの目指すべきところ

この本では違うと言ってますがたぶん一緒。
歴史的に見て、RESTよりもSOAPの方が先に出てきました。
しかし、SOAPはHTTPを使用する場合はすべてのアクセスをGETもしくはPOSTでしか受け付けない規定があるため、データの検索や、データの更新がすべてGET/POSTで行われてしまい、インフラレイヤーからだとどのアクセスが更新なのか、どのアクセスが検索なのかが判らず、どのデータをキャッシュしてもよいのかの判断ができないということが問題となります。
それを解消するためにURLごとにこのURLは更新作業なのでキャッシュしてはいけない、このURLは検索なのでキャッシュしても大丈夫〜みたいなのを定義していたのですが、それは面倒くさい。

HTTPの(ほぼ使われていなかった)METHODにバインドすることでその判断を画一的にできるんじゃないかとして生まれたのがRESTです。

本を読んでいるとなんとなくSOAPはRESTの上位バージョンみたいな印象を受けるのですが、歴史的に見ればSOAPの上位バージョンがRESTでした。*1

また、SOAPxmlでのやり取りしか定義されていませんが、RESTはxmlでもjsonでもやり取りができます。jsonでやり取りをする場合にxmlのようなスキーマがありませんが、インターフェースには型が必要だとねという話で盛り上がっているのがjson schemaです。
RESTではSOAPにあった、必ずスキーマと定義しなければいけないという規定はオミットされていますが、スキーマも定義できるようにする方向に舵がとられているというのはバランスなのでしょう。

と、RESTとSOAPは同じようなものとの説明をしてきましたが、明確に違う場所が一つあります。SOAPは単独で完結していますが、RESTは外部に依存していることです。
RESTにペイロードの規定はありませんが、実質HTTPもしくはその互換APIに依存しています。
HTTP自体そこまで効率的とはいえないので、そもそも論としてHTTP以外を使用できる場合はSOAPが生きてくると思います。*2

その他

JPAのエンティティクラスをそのまま公開するなと明確に書いてあるのは好印象

正直、JAX-RSはちゃんと勉強してないので細かい場所は読んで終わりになってしまいました。
内容で間違ってる場所があればだれか怖い人が突っ込んでくれるでしょう。
Java EE 8のJSRは読もうかな。

Java EE 7徹底入門 標準Javaフレームワークによる高信頼性Webシステムの構築

Java EE 7徹底入門 標準Javaフレームワークによる高信頼性Webシステムの構築

*1:語弊がある表現なのは認めます

*2:そこまでやるならxml自体捨てるべき