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 UDP は UDP パケットで直接 SOAP エンベロープを転送する。次にくるのは SOAP over TCP ではないだろうか。
とつらつらと考えていたら Paul Prescod 氏の Roots of the REST/SOAP Debate というページをみつけてしまった。これも読んでおかないと…