REST vs Web Services

REST と Web サービスの論争が海外の Web サービスコミュニティ?(変な名前だけど要は Don Box とか Tim Bray とか Mark Braker とか Tim Ewald とかだ) の blog で、ここのところ再燃している。一つの要因はマイクロソフトが WS-Transfer と WS-Enumeration を公開してきたところにある*1

http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-transfer.pdf
http://msdn.microsoft.com/library/en-us/dnglobspec/html/ws-enumeration.pdf

WS-Transfer と WS-Enumeration の概略は、いつものことながら Omri Gazitt 氏の blog がわかりやすい*2

http://www.gazitt.com/OhmBlog/permalink.aspx/0b69c3e1-c1a6-4017-bf22-9ab6508b2697

WS-Transfer は一言で言ってしまうと WS-* において CRUD (CREATE, RETRIEVE, UPDATE, DELETE)を実現するための仕様である*3

これはすなわち RESTful な WS-* を提供するための枠組ということではないだろうか。そこで強引に RESTful Web*4 と RESTful WS の各アーキテクチャ要素をマッピングしてみると以下のようになる。

Web     WS-*
 HTTP    SOAP + WS-Transfer
 URI     WS-Addressing の EPR
 XML     SOAP Body の中身

HTTP は Web のトランスポートプロトコルと verb (GET, PUT, POST DELETE)の集合だ。これは WS-* では SOAP というトランスポートプロトコルと WS-Transfer (SOAP ヘッダで CRUD パターンを実現)になる。

リソースを特定する識別子である URI (参照)は WS-Addressing の EndpointReference に対応する。WS-Addressing の EPR を URI に例えるのは別に僕のオリジナルではなく、Omri Gazitt 氏が既に指摘しているとおりだ。

http://www.gazitt.com/OhmBlog/permalink.aspx/5bdf0fc4-88b0-46ac-a712-fdba246235d5

そして RESTful Web において転送されるデータは XML であり*5、それはそのまま SOAP の Body に入るアプリケーションペイロードに対応する。

ここまでくると容易に想像できることだが、もはや WS-* は HTTP に依存する必用はまったくない。実際に SOAP over UDPUDP パケットで直接 SOAP エンベロープを転送する。次にくるのは SOAP over TCP ではないだろうか。

とつらつらと考えていたら Paul Prescod 氏の Roots of the REST/SOAP Debate というページをみつけてしまった。これも読んでおかないと…

*1:あまり関係ないけど、マイクロソフトが仕様書を PDF で公開してきたのは少し驚きだった

*2:Gazitt 氏によれば、ちなみにこの WS-Transfer は Don Box 氏が望んでいた仕様のようだ。

*3:WS-Transfer では Retrieve ではなくて GET だけど

*4:あまり聞かない言葉だけど、要は HTTP/URI/XML な REST だと思ってください。

*5:本当はここは XML には限らないが簡単のためにこう書きます…