SOAP (ソープ)は、コンピュータネットワーク 内のWebサービス の実装において、構造化された情報を交換するための通信プロトコル の仕様である。拡張性 、中立性 、独立性を導入することを目的とする。XML-RPC から発展した、XML Webサービス のための、XML ベースのRPC プロトコルである。
メッセージ形式としてXMLインフォメーションセット を使用する。また、メッセージのネゴシエーションおよび伝送はアプリケーション層 のプロトコル(多くの場合HTTP またはSMTP )に依存する。
SOAPにより、全く異なるオペレーティングシステム (例えばWindows とLinux )上で走っているプロセス間でもXML を使って意思疎通が可能になる。HTTPのようなWebプロトコルは全てのオペレーティングシステムにインストールされて走っているので、SOAPの仕組みを使えば、クライアントはその言語やプラットフォームが何であれ、ウェブサービスを起動してレスポンスを受け取ることが出来る。
元はSimple Object Access Protocolの頭字語 とされていたが、現在は「何かの頭字語 ではない」とされている[ 1] 。
概要
拡張可能で分散的なフレームワーク であり、HTTP 以外にも様々なコンピュータネットワーク の通信プロトコル で利用することができると主張され、SMTP へのバインディングも示されているが、実際上TCP/IP上のHTTP(S)以外の使用は現実的ではない。主要な実装としてApache Axis がある。多くの実装の間で相互運用性に問題があるとしてWS-I というコンソーシアムが作られたが、現在はOASIS の一部となっている。
いくつかのSOAPメッセージを相互作用させることによってリモートプロシージャコールが実現できる、Webサービスに有効な手段の一つである、などと主張されている。
メッセージの表現にXML を使用する。メッセージはヘッダとボディから成る。ヘッダはオプショナルであり、ルーティング やセキュリティ 、そして トランザクション などのための情報といったメタ情報 を格納する。ボディは、主要な情報すなわちペイロード である。
相互運用性のためにはXML Schema などで、なんらかのスキーマを定義することが望ましいであろう。また、WSDL という記述言語がある。
「WS-*」と総称される関連プロトコルが多量にある。
特徴
SOAP はウェブサービスのための「Web services protocol stack」における「Messaging Protocol」層を提供する。SOAPはXMLを基盤とするプロトコルで、三つの部分で構成される:
「envelope」(小包)。これはメッセージ構造を定義する[ 2] 。また、どのようにこれを処理すべきかを定義する:
アプリケーションで定義されるデータ型のインスタンスを表現するためのエンコーディング規則
プロシージャ呼出しとレスポンスを表すための約束事
SOAPには三つの大きな特徴がある:
拡張性 (セキュリティやWS-Addressing などは開発中の拡張機能である)
中立性 (SOAPはHTTP , SMTP , TCP , UDP (英語版 ) , JMS などのいかなるプロトコル上でも運用できる)
独立性 (SOAPはいかなるプログラミングモデル でも使える)
SOAPで出来ることの一例を挙げると、たとえば或るアプリケーションが、ウェブサービス(例えば不動産価格データベース)を利用可能なサーバに、検索条件パラメータを入れたSOAPリクエストを送ったとする。すると、そのサーバーはSOAPレスポンス(価格、場所、特徴などの検索結果データを書き込んだXML形式文書)を返してくる。返ってきたデータは標準化された機械処理可能な書式で来るので、それを受け取ったアプリケーションはそのデータを直接処理できる。
SOAPアーキテクチャには、次の幾つかレイヤーのための仕様がある:
メッセージ形式
メッセージ交換パターン(Message Exchange Pattern : MEP)
下層のトランスポートプロトコルとの結合
メッセージ処理モデル
プロトコル拡張性
仕様
SOAPはW3Cにより標準化されている。以下は具体的な仕様である。
SOAP processing model
SOAP processing model はSOAPが採用する分散型 メッセージ処理モデルである。
分散コンピューティング を指向するSOAPでは「ネットワーク上に存在するノードがメッセージを送り合いながら処理をおこない最終結果を得る」という処理モデルを取っている[ 3] 。これが SOAP processing model である。
SOAP message
SOAP structure SOAP message はノード間の情報伝達における基本単位である[ 4] 。SOAP message はドキュメント直下に<Envelope>
要素を持ち[ 5] 、その下に<Header>
要素と<Body>
要素が配置される(図参照)[ 6] 。
<Header>
要素は0個以上の header block からなる[ 7] 。各header blockは名前付き要素であり、属性をもつ。仕様では encodingStyle
/ role
/ mustUnderstand
/ relay
の4属性が定義されている[ 8] 。block の role
属性はノードの role と結びついており、その header block がノードをターゲットとすると呼ばれる。
<Body>
要素のコンテンツは要素ツリーであり、その具体的中身(利用可能な要素、木構造)は各サービスで定義される。
SOAP Node
SOAP Node はメッセージ処理を担うノードである。
processing model における出発ノードを initial SOAP sender 、中間ノードを SOAP intermediary 、終着ノードを ultimate SOAP receiver という[ 9] 。各ノードが担う役割を SOAP roles という。仕様では next
/ none
/ ultimateReceiver
の3つの role name を定める。終着ノードはメッセージのbodyを処理する責務を負う[ 10] 。中間ノードはそのroleに基づき header block の処理を担う。
その他
SOAPメッセージの例
一例として、あるクライアントが、ショッピングサイト(例示のための架空のものである)のサービスに商品IDを提示して商品の詳細を求めるリクエストメッセージはおおよそ以下のようになる。
<SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/" >
<SOAP-ENV:Body>
<getProductDetails xmlns= "http://warehouse.example.com/ws" >
<productId> 827635</productId>
</getProductDetails>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
これに対し、ショッピングサイトのサービス側の、要求に基づく商品データを含むレスポンスメッセージはおおよそ以下のようになる。
<SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/" >
<SOAP-ENV:Body>
<getProductDetailsResponse xmlns= "http://warehouse.example.com/ws" >
<getProductDetailsResult>
<productName> Toptimate 3-Piece Set</productName>
<productId> 827635</productId>
<description> 3-Piece luggage set. Black Polyester.</description>
<price> 100.50</price>
<inStock> true</inStock>
</getProductDetailsResult>
</getProductDetailsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
関連項目
外部リンク
脚注
^ 「In previous versions of this specification the SOAP name was an acronym. This is no longer the case.」(SOAP Version 1.2 Part 1 : Messaging Framework (Second Edition) より引用)。
^
Hirsch, Frederick; Kemp, John; Ilkka, Jani (2007-01-11). Mobile Web Services: Architecture and Implementation . John Wiley & Sons (2007発行). p. 27. ISBN 9780470032596 . https://books.google.com/books?id=v5f0ORBgd5IC 2014年9月15日 閲覧 . "Simple Object Access Protocol (SOAP) はメッセージの小包の構造を定義している。小包は、アプリケーション用の荷物(メッセージ・ボディ)と、管理情報(メッセージ・ヘッダ)の二つの部分で構成される。"
^ "SOAP provides a distributed processing model that assumes a SOAP message originates at an initial SOAP sender and is sent to an ultimate SOAP receiver via zero or more SOAP intermediaries. ... A SOAP node receiving a SOAP message MUST perform processing according to the SOAP processing model" W3C. SOAP 1.2 specification.
^ "SOAP message The basic unit of communication between SOAP nodes." W3C. SOAP 1.2 specification.
^ "A SOAP message Infoset consists of a document information item with exactly one member in its [children] property, which MUST be the SOAP Envelope
element information item " W3C. SOAP 1.2 specification.
^ "One or two element information item s in its [children] property in order as follows: 1. An optional Header
element ... 2. A mandatory Body
element " W3C. SOAP 1.2 specification.
^ "SOAP header A collection of zero or more SOAP header blocks" W3C. SOAP 1.2 specification.
^ "MAY have zero or more attribute information items in its [attributes] property ... which have special significance for SOAP processing: encodingStyle ... role ... mustUnderstand ... relay" W3C. SOAP 1.2 specification.
^ "A SOAP node can be the initial SOAP sender, an ultimate SOAP receiver, or a SOAP intermediary." W3C. SOAP 1.2 specification.
^ "An ultimate SOAP receiver MUST correctly process the immediate children of the SOAP body" W3C. SOAP 1.2 specification.