<目次>
(1) SOAP通信の仕組みやHTTPプロトコルとの違いなど
(1-1) SOAPとは?
(1-2) SOAPを構成する要素
(1-3) SOAPの通信の仕組み&HTTPとの違い
(1) SOAP通信の仕組みやHTTPプロトコルとの違いなど
(1-1) SOAPとは?
「Simple Object Access Protocol」の略で、軽量のXMLベースの通信プロトコルです。
分散型(=複数のサーバでシステムを構成してあたかも1つのシステムのように見せる構成)の環境におけるデータ通信(Webサービス間の通信)や、そのWebサービスを利用するクライアントとの間の通信の方法を規定しています。
SOAPは様々なプログラミング言語のアプリケーション間で追加開発を行わずにスムーズに通信できるような「中間言語」となるように開発されました。
どのプログラミング言語でも理解できるXML形式データがありますが、各言語においてXMLに関する統一の規約がないため、そこでSOAPが登場します。
(1-2) SOAPを構成する要素
SOAPにおいてクライアントやWebサービスに連携するメッセージは「SOAPメッセージ」と呼ばれており、次のような構成になっています。
(図111)
●①SOAP Envelope
XMLをSOAPメッセージとして識別するための要素です。要素タグ「<soap:Envelope>」で定義されます。
(例1)
<soap:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
(例2)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
<!-- ボディ部 -->
</SOAP-ENV:Envelope>
●②SOAP Header
「SOAP Envelope」内のヘッダー情報を保持する部分です。例として以下のような情報を保持できます。
(例)Headerで保持する情報の例
・リクエストを送ったアプリケーション側で使用できる認証の資格情報
・SOAPメッセージ内で使用できる「複合型(Complex Types)」のデータ(xsd)を定義する
(例)Header部で保持する「複合型」について
複合型は要素タグ「<xsd:complexType>」で定義されます。
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Fruit Name" type="xs:string"/>
<xsd:element name="Fruit Description" type="xs:string"/>
<xsd:element name="Fruit Quantity" type="xs:integer"/>
</xsd:sequence>
</xsd:complexType>
(補足)Header Blockについて
SOAPヘッダーは複数定義する事もできますが、複数個定義した場合はその配下の要素(子要素)は「Header Block」として認識されます(階層構造として認識される)。
●③SOAP Body
ボディ部では全ての「リクエスト(要求)」と「レスポンス(応答)」の情報を保持しています。つまり、Webサービス間やWebサービス-クライアント間で実際に受け渡したい中身のデータを保持します。
(例)Body部で、Headerにて定義した複合型の値をセットして連携
<soap:Body>
<GetFruitInfo>
<FruitName>Apple</FruitName>
<FruitDescription>Made in Aomori</FruitDescription>
<FruitQuantity>250</FruitQuantity>
</<GetFruitInfo>>
</soap:Body>
(補足)
Body Elementはボディ部内の各要素を指しています(例:<p:departure>など)。
(1-3) SOAPの通信の仕組み&HTTPとの違い
全てのSOAPの通信は基本的にHTTPプロトコル経由で行われます。なので「SOAPとHTTPの違い」という意味では、そもそも比較するものではなく土俵が違うものである、という事になります。
では、SOAPはどのようにHTTPでどのように使われるのでしょうか?おおまかな流れとしては次の通りです。
(図121)
(流れ)
・①SOAPメッセージの生成
「クライアント側」で処理コールや引数の情報をSOAPメッセージのXMLに纏めます。
・②SOAPメッセージの送信
「クライアント側」でSOAPメッセージをHTTPリクエストの一部として送ります。
・③SOAPメッセージの受信&レスポンス
「サーバ側」で受信したSOAPメッセージを解凍し、適切なレスポンスをSOAPメッセージ形式でクライアントに返却
これにより、SOAPは開発言語に依存しない通信が実現できます。加えて、SOAP登場以前に使われていたRPC通信で問題だったFirewallのポート開放に伴う煩雑な設定などが不要となり(HTTPリクエストに乗せて送れるため)、その点においてもメリットがあります。