SOAP(ソープ)は、
Webサービスを実装する際に、構造化された情報を交換するための
通信プロトコル仕様です。その目的は、拡張性、中立性、独立性を実現することにあります。XML-RPCから発展したこのプロトコルは、XMLベースのRPC(Remote Procedure Call)として機能します。
メッセージ形式にはXMLインフォメーションセットが使用され、メッセージのやり取りはHTTPやSMTPといったアプリケーション層のプロトコルに依存します。これにより、Windowsや
Linuxのような異なるOS上で動作するプロセス間でも、XMLを介して通信が可能になります。SOAPを利用することで、クライアントは自身の言語やプラットフォームに関わらず、
Webサービスを起動し、その応答を受け取ることができます。
当初はSimple Object Access Protocolの略とされていましたが、現在では単なる名称として扱われています。
概要
SOAPは拡張可能で分散的なフレームワークであり、HTTP以外の様々な
通信プロトコルにも適用可能であるとされています。SMTPへのバインディングも示唆されていますが、実際にはTCP/IP上のHTTP(S)以外での利用は現実的ではありません。主要な実装としてはApache Axisが挙げられます。実装間での相互運用性の問題から、WS-Iというコンソーシアムが設立されましたが、現在はOASISの一部となっています。
SOAPは、複数のメッセージを連携させることでリモートプロシージャコールを実現し、
Webサービスの効果的な手段の一つとされています。メッセージはXMLで表現され、ヘッダーとボディで構成されます。ヘッダーはルーティングやセキュリティ、
トランザクションなどの
メタデータを格納し、ボディには主要なペイロードが含まれます。相互運用性を確保するためには、XML Schemaなどでスキーマを定義することが望ましく、WSDLという記述言語も利用されます。「WS-
」と総称される関連プロトコルが多数存在します。
特徴
SOAPは、Webサービスにおける「Web services protocol stack」の「Messaging Protocol」層を担います。XMLを基盤とし、以下の3つの要素で構成されます。
Envelope(小包):メッセージ構造を定義し、処理方法を規定します。
エンコーディング規則:アプリケーションで定義されたデータ型のインスタンスを表現します。
プロシージャ呼び出しと応答の規約:プロシージャ呼び出しとそれに対する応答の形式を定めます。
SOAPには以下の3つの主要な特徴があります。
拡張性:セキュリティやWS-Addressingなどの拡張機能が開発されています。
中立性:HTTP、SMTP、TCP、UDP、JMSなど、様々なプロトコル上で動作可能です。
独立性:特定のプログラミングモデルに依存せず利用できます。
SOAPの利用例として、アプリケーションが不動産価格データベースのようなWebサービスに、検索条件をパラメータとしてSOAPリクエストを送信するケースが挙げられます。Webサービスは、検索結果(価格、場所、特徴など)を含むXML形式のSOAPレスポンスを返します。このレスポンスは標準化された機械処理可能な形式であるため、アプリケーションは直接データを処理できます。
SOAPアーキテクチャには、メッセージ形式、メッセージ交換パターン(MEP)、下層トランスポートプロトコルとの結合、メッセージ処理モデル、プロトコル拡張性など、複数のレイヤーに対する仕様が存在します。
仕様
SOAPはW3Cによって標準化されています。以下は具体的な仕様です。
SOAP processing model
SOAPは分散型メッセージ処理モデルを採用しており、ネットワーク上のノードがメッセージを送り合いながら処理を進め、最終結果を得るというモデルで動作します。
SOAP message
SOAPメッセージは、ノード間の情報伝達の基本単位です。メッセージは、ドキュメント直下に``要素を持ち、その下に``要素と``要素が配置されます。
``要素は0個以上のヘッダーブロックで構成され、各ブロックは名前付きの要素で属性を持ちます。仕様では、encodingStyle、role、mustUnderstand、relayの4つの属性が定義されています。ブロックのrole属性はノードのroleと結びついており、ヘッダーブロックがノードをターゲットとすると解釈されます。
``要素の内容は要素ツリーであり、その具体的な内容は各サービスで定義されます。
SOAP Node
SOAPノードはメッセージ処理を担うノードです。処理モデルにおいて、開始ノードはinitial SOAP sender、中間ノードはSOAP intermediary、終着ノードはultimate SOAP receiverと呼ばれます。各ノードが担う役割はSOAP rolesと呼ばれ、仕様ではnext、none、ultimateReceiverの3つのrole nameが定義されています。終着ノードはメッセージのボディを処理し、中間ノードは自身の役割に基づいてヘッダーブロックを処理します。
その他
SOAP extensibility model:SOAP機能とSOAPモジュールの概念を定義します。
SOAP underlying protocol binding:SOAPノード間でメッセージを交換するために使用する下層プロトコルへの結合を定義するための規約を示すフレームワークです。
SOAPメッセージの例
以下に、クライアントがショッピングサイトのサービスに商品IDを提示して商品詳細を求めるリクエストメッセージの例を示します。
xml
12345
そして、ショッピングサイトのサービスからのレスポンスメッセージの例は以下のようになります。
xml
Example Product
100.00
This is an example product.
関連項目
WDDX
WS-Addressing
外部リンク
SOAP Version 1.2 (W3C)
脚注