SOAP (プロトコル)
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を基盤とするプロトコルで、三つの部分で構成される:
SOAPには三つの大きな特徴がある:
SOAPで出来ることの一例を挙げると、たとえば或るアプリケーションが、ウェブサービス(例えば不動産価格データベース)を利用可能なサーバに、検索条件パラメータを入れたSOAPリクエストを送ったとする。すると、そのサーバーはSOAPレスポンス(価格、場所、特徴などの検索結果データを書き込んだXML形式文書)を返してくる。返ってきたデータは標準化された機械処理可能な書式で来るので、それを受け取ったアプリケーションはそのデータを直接処理できる。 SOAPアーキテクチャには、次の幾つかレイヤーのための仕様がある:
仕様SOAPはW3Cにより標準化されている。以下は具体的な仕様である。 SOAP processing modelSOAP processing model はSOAPが採用する分散型メッセージ処理モデルである。 分散コンピューティングを指向するSOAPでは「ネットワーク上に存在するノードがメッセージを送り合いながら処理をおこない最終結果を得る」という処理モデルを取っている[3]。これが SOAP processing model である。 SOAP message![]() SOAP message はノード間の情報伝達における基本単位である[4]。SOAP message はドキュメント直下に
SOAP NodeSOAP Node はメッセージ処理を担うノードである。 processing model における出発ノードを initial SOAP sender、中間ノードを SOAP intermediary、終着ノードを ultimate SOAP receiver という[9]。各ノードが担う役割を SOAP roles という。仕様では その他
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>
関連項目![]() 外部リンク
脚注
|