質問: 現在、javaのルールをRESTをつかってJSON形式にしてnode.jsから呼び出すといった作業をしている過程で、SOAPとRESTについて違いが知りたくしらべているのですが、どのサイトを見てもいまいちピンと来るものがありません。 わかりやすい例などございましたらそれもふくめて教えていただけませんでしょうか?
回答: どちらも、Web API(HTTPをベースにした一問一答型のサービス仕様)を構成するための流儀です。 どこが違うかというといろいろあるのですが、まずSOAPはかっちり決まった規格であり、RESTは思想とか設計指針であるという、段階の違いです。 SOAPは規格としてかっちり決まっているだけに、公開されているSOAPサービスをもとにアクセス用のクライアントクラスやサーバークラスを自動生成できたりします。 RESTは思想・指針ですからそれにどのくらい従うかは開発者次第であり、だから形容詞として「RESTful(REST的である)」なんて表現をしたりします。 では次に、RESTという思想とSOAP(の基本になっている)思想との違い。 RESTは「リソース指向」、SOAPは「サービス指向」であると言えます。SOAPのSOは「Service-Oriented(サービス指向)」ですしね。 サービス指向の方は、動詞、コマンド名、メソッド名単位でAPIを整理することだと思ってください。 対してリソース指向は、名詞、オブジェクト名、対象単位でAPIを整理することです。 もう少し具体的に表現すると、 SOAPは公開するURLが http://ホスト名/サービス名/メソッド名 みたいな形になり、ここにPOSTでXMLにまとめた引数を渡します。レスポンスもXMLにまとめられて返ってきます。 RESTは公開するURLが http://ホスト名/階層化されたリソース名 みたいな形になり、そのリソースをどう操作したいのかはHTTPの動詞(GET/POST/PUT/DELETEなど)で指定することになります。 「階層化されたリソース名」って何よ、ってのをもう少し具体的に表現すると、 「ユーザーhogeさんのブログfugaの記事piyoについたコメント」という集合を /users/hoge/blogs/fuga/articles/piyo/comments と表現する、みたいなことです。ここにPUT動詞を使うことで「コメントを新しく投稿する」ことを意味する、と。 そのほかにRESTでは、ステートレスというのを大事にしていて、例えばCookieでログイントークンを保持するなんていうやり方を邪道とします。これに厳密に従おうとするととても認証関係はとても面倒くさいことになるのでCookie使っちゃうこと多いですけど。