SOAP Web サービスのチュートリアル: SOAP プロトコルとは何ですか? 例

SOAPとは何ですか?

SOAP は、HTTP 経由で Web サービスにアクセスするための XML ベースのプロトコルです。 すべてのアプリケーションで使用できる仕様がいくつかあります。

SOAP は Simple Object Access Protocol として知られていますが、後に SOAP v1.2 に短縮されました。SOAP はプロトコルであり、言い換えれば、Web サービスが互いに通信する方法、または Web サービスを呼び出すクライアント アプリケーションと通信する方法の定義です。

SOAP は、さまざまなプログラミング言語で構築されたアプリケーションが相互に簡単に通信でき、極端な開発作業を回避できるようにするための中間言語として開発されました。

石鹸の紹介

今日の世界では、さまざまなプログラミング言語で構築された膨大な数のアプリケーションがあります。たとえば、 Java、もう1つは.Net、もう1つは PHP.

今日のネットワーク化された世界では、アプリケーション間でデータを交換することが非常に重要です。しかし、これらの異種アプリケーション間でのデータ交換は複雑になります。したがって、このデータ交換を実現するためのコードも複雑になります。

この複雑さに対処するために使用される方法の 1 つは、アプリケーション間でデータを交換するための中間言語として XML (Extensible Markup Language) を使用することです。

すべてのプログラミング言語は XML マークアップ言語を理解できます。 したがって、XML はデータ交換の基礎となる媒体として使用されました。

しかし、すべてのプログラミング言語にわたるデータ交換のための XML の使用に関する標準仕様はありません。 そこでSOAPソフトウェアが登場します。

SOAP は、HTTP 経由で XML と連携するように設計されており、すべてのアプリケーションで使用できる仕様を備えています。SOAP プロトコルの詳細については、以降の章で説明します。

SOAPの利点

SOAP は、アプリケーション間のデータ交換に使用されるプロトコルです。 SOAP が使用される理由のいくつかを以下に示します。

  • SOAP ベースの Web サービスを開発する場合、Web サービスがクライアント アプリケーションと通信するために使用できる言語が必要です。 SOAP は、この目的を達成するために開発された最適なメディアです。 このプロトコルは、すべての Web 標準の管理団体である W3C コンソーシアムによっても推奨されています。
  • SOAP は、アプリケーション間のデータ交換に使用される軽量プロトコルです。 キーワード「」に注意してください。。」 SOAP プログラミングは XML 言語に基づいており、XML 言語自体が軽量のデータ交換言語であるため、プロトコルとしての SOAP も同じカテゴリに分類されます。
  • SOAPはプラットフォームに依存しないように設計されており、オペレーティングシステムにも依存しないように設計されています。そのため、SOAPプロトコルは、プラットフォームとオペレーティングシステムの両方で、あらゆるプログラミング言語ベースのアプリケーションで動作します。 Windows と Linux プラットフォームを提供します。
  • SOAP は HTTP プロトコルで動作します。SOAP は、すべての Web アプリケーションで使用されるデフォルトのプロトコルである HTTP プロトコルで動作します。 したがって、SOAP プロトコルに基づいて構築された Web サービスを World Wide Web 上で実行するために必要なカスタマイズは必要ありません。

SOAP ビルディング ブロック

SOAP 仕様では、「」として知られるものを定義しています。SOAPメッセージ」 これは、Web サービスとクライアント アプリケーションに送信されるものです。

以下の SOAP アーキテクチャの図は、SOAP メッセージのさまざまな構成要素を示しています。

SOAP ビルディング ブロック
SOAP メッセージの構成要素

SOAP メッセージは、以下の構成要素を含む単なる XML 文書にすぎません。

  • XML ドキュメントを SOAP メッセージとして識別するエンベロープ要素 - これは SOAP メッセージの包含部分であり、SOAP メッセージ内のすべての詳細をカプセル化するために使用されます。これは SOAP メッセージのルート要素です。
  • ヘッダー情報を含むヘッダー要素 – ヘッダー要素には、呼び出し元アプリケーションで使用できる認証資格情報などの情報を含めることができます。また、SOAP メッセージで使用できる複合型の定義を含めることもできます。デフォルトでは、SOAP メッセージには、文字列や数値などの単純な型のパラメータを含めることができますが、複合オブジェクト型のパラメータを含めることもできます。

複合型の単純な SOAP サービスの例を以下に示します。

「チュートリアル名」と「チュートリアル」の組み合わせを持つ構造化データ型を送信したいとします。 Descript「ion」の場合、複合型は以下のように定義されます。

複合型は要素タグによって定義される構造の必要なすべての要素とそれぞれのデータ型が複合型コレクションで定義されます。

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • 呼び出しと応答の情報を含むボディ要素 – この要素には、Web サービスと呼び出しアプリケーションの間で送信する必要がある実際のデータが含まれます。以下は、ヘッダー セクションで定義された複合型で実際に機能する SOAP ボディの SOAP Web サービスの例です。チュートリアル名とチュートリアルの応答は次のとおりです。 Descriptこの Web サービスを呼び出す呼び出し元アプリケーションに送信されるイオンです。
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

SOAPメッセージの構造

注意すべき点の XNUMX つは、SOAP メッセージは通常、Web サービスの呼び出し時に Web サービスによって自動生成されるということです。

クライアント アプリケーションが Web サービス内のメソッドを呼び出すたびに、Web サービスは、Web サービスからクライアント アプリケーションに送信されるデータの必要な詳細を含む SOAP メッセージを自動的に生成します。

このSOAPチュートリアルの前のトピックで説明したように、単純なSOAPメッセージには次の要素があります。

  • エンベロープ要素
  • ヘッダー要素と
  • ボディ要素
  • Fault 要素 (オプション)

以下の単純な SOAP メッセージの例を見て、要素が実際に何を行うかを見てみましょう。

SOAPメッセージの構造

SOAPメッセージの構造
  1. 上記の SOAP メッセージからわかるように、SOAP メッセージの最初の部分は、SOAP メッセージ全体をカプセル化するために使用されるエンベロープ要素です。
  2. 次の要素は、実際のメッセージの詳細を含む SOAP 本文です。
  3. メッセージには、「Guru99WebService」という名前の Web サービスが含まれています。
  4. 「Guru99Webservice」は「int」型のパラメータを受け入れ、TutorialID という名前を持ちます。

ここで、上記の SOAP メッセージが Web サービスとクライアント アプリケーションの間で受け渡されます。

上記の情報がクライアント アプリケーションにとってどれほど役立つかがわかります。 SOAP メッセージは、クライアント アプリケーションに、Web サービスの名前、Web サービスが期待するパラメータ、および Web サービスが受け取る各パラメータの型を伝えます。

SOAP エンベロープ要素

構成要素の最初のビットは SOAP エンベロープです。

SOAP エンベロープは、Web サービスとクライアント アプリケーション間で交換される SOAP メッセージの必要な詳細をすべてカプセル化するために使用されます。

SOAP エンベロープ要素は、SOAP メッセージの始まりと終わりを示すために使用されます。 これにより、Web サービスを呼び出すクライアント アプリケーションは、SOAP メッセージがいつ終了するかを知ることができます。

SOAP エンベロープ要素については、次の点に注意してください。

  • すべての SOAP メッセージにはルート Envelope 要素が必要です。 SOAP メッセージにはエンベロープ要素が含まれることが絶対に必須です。
  • すべての Envelope 要素には、少なくとも XNUMX つの SOAP 本体要素が必要です。
  • Envelope 要素にヘッダー要素が含まれる場合、ヘッダー要素は XNUMX つだけ含まれている必要があり、エンベロープの最初の子としてボディ要素の前に表示される必要があります。
  • SOAP バージョンが変更されると、エンベロープも変更されます。
  • v1.1 準拠の SOAP プロセッサは、v1.2 エンベロープ名前空間を含むメッセージを受信するとフォールトを生成します。
  • v1.2 準拠の SOAP プロセッサは、v1.2 エンベロープ名前空間が含まれていないメッセージを受信すると、バージョン不一致エラーを生成します。

以下は、SOAP エンベロープ要素のバージョン 1.2 の SOAP API の例です。

<?xml version="1.0"?>
<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:Body>
        <Guru99WebService xmlns="http://tempuri.org/">
                  <TutorialID>int</TutorialID>
                </Guru99WebService>
          </soap:Body>
</SOAP-ENV:Envelope>

障害メッセージ

SOAP Web サービスに対してリクエストが行われると、返される応答には成功応答またはエラー応答の 2 つの形式があります。 成功が生成されると、サーバーからの応答は常に SOAP メッセージになります。 ただし、SOAP フォールトが生成された場合は、「HTTP 500」エラーとして返されます。

SOAP エラー メッセージは次の要素で構成されます。

  1. – エラーのコードを指定するコードです。 障害コードは以下のいずれかの値になります。
    1. SOAP-ENV:VersionMismatch – これは、SOAP エンベロープ要素の無効な名前空間が見つかった場合です。
    2. SOAP-ENV:MustUnderstand –MustUnderstand 属性が「1」に設定されている、Header 要素の直接の子要素が理解されませんでした。
    3. SOAP-ENV:Client – メッセージの形式が間違っているか、間違った情報が含まれています。
    4. SOAP-ENV:Server – サーバーに問題があったため、メッセージを続行できませんでした。
  2. – これは、エラーの詳細な説明を示すテキスト メッセージです。
  3. (オプション)– これは、誰が障害を引き起こしたかを示すテキスト文字列です。
  4. (オプション) – これは、アプリケーション固有のエラー メッセージの要素です。 したがって、アプリケーションには、さまざまなビジネス ロジック シナリオに応じて特定のエラー メッセージが表示される可能性があります。

障害メッセージの例

障害メッセージの例を以下に示します。 クライアントがクラス GetTutorial の TutorialID と呼ばれるメソッドを使用しようとするシナリオの場合、エラーが生成されます。

定義されたクラスにメソッドが存在しない場合、次のエラー メッセージが生成されます。

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
      <SOAP-ENV:Body>
         <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultstring xsi:type="xsd:string">
            Failed to locate method (GetTutorialID) in class (GetTutorial)
         </faultstring>
    </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

出力:

上記のコードを実行すると、「クラス (GetTutorial) 内のメソッド (GetTutorialID) が見つかりませんでした」のようなエラーが表示されます。

SOAP通信モデル

SOAP によるすべての通信は HTTP プロトコル経由で行われます。 SOAP が登場する前は、多くの Webサービス 通信には標準の RPC (リモート プロシージャ コール) スタイルが使用されました。 これは最も単純なタイプのコミュニケーションですが、多くの制限がありました。

この SOAP API チュートリアルでは、この通信がどのように機能するかを以下の図で見てみましょう。 この例では、サーバーが 2 つのメソッドを提供する Web サービスをホストしていると仮定します。

  • 従業員を取得する – これにより、すべての従業員の詳細が取得されます
  • 従業員を設定する – これにより、従業員の部門、給与などの詳細の値がそれに応じて設定されます。

通常の RPC スタイルの通信では、クライアントはリクエスト内のメソッドを呼び出し、必要なパラメータをサーバーに送信するだけで、サーバーは必要な応答を送信します。

SOAP通信モデル

上記の通信モデルには、以下の重大な制限があります。

  1. 言語に依存しない – メソッドをホストするサーバーは特定のプログラミング言語であり、通常、サーバーへの呼び出しはそのプログラミング言語のみで行われます。
  2. 標準プロトコルではありません – リモート プロシージャへの呼び出しが行われる場合、その呼び出しは標準プロトコル経由では実行されません。 Web 上のほとんどすべての通信は HTTP プロトコル経由で行われる必要があるため、これが問題でした。
  3. ファイアウォール – RPC 呼び出しは通常のプロトコルを経由しないため、クライアントがサーバーと通信できるようにサーバー上で別のポートを開く必要があります。 通常、すべてのファイアウォールはこの種のトラフィックをブロックし、クライアントとサーバー間のこの種の通信が確実に機能するようにするには、一般に多くの構成が必要でした。

上記の制限をすべて克服するために、SOAP は以下の通信モデルを使用します。

SOAP通信モデル

  1. クライアントは、プロシージャ呼び出しと引数に関する情報を SOAP メッセージにフォーマットし、それを HTTP リクエストの一部としてサーバーに送信します。 データを SOAP メッセージにカプセル化するこのプロセスは、 マーシャリング。
  2. 次に、サーバーはクライアントから送信されたメッセージをアンラップし、クライアントが何を要求したかを確認し、適切な応答を SOAP メッセージとしてクライアントに送り返します。 クライアントから送信されたリクエストのラップを解除することは、次のように知られています。 デマーシャリング。

実践的な SOAP の例

この SoapUI チュートリアルでは、実用的な SOAP の例を見てみましょう。

おそらく、SOAP メッセージがどのように生成されるかを確認する最良の方法の XNUMX つは、Web サービスの動作を実際に確認することです。

このトピックでは、 MicrosoftASMX Web サービスを構築するための .Net フレームワーク。このタイプの Web サービスは、SOAP バージョン 1.1 とバージョン 1.2 の両方をサポートします。

ASMX Web サービスは自動的に Web サービス定義言語 (WSDL) 書類。 この WSDL ドキュメントは、呼び出し側クライアント アプリケーションが Web サービスの機能を認識できるようにするために必要です。

この例では、Web サービスを呼び出すアプリケーションに文字列を返すために使用される単純な Web サービスを作成します。

この Web サービスは、 Asp.Net ウェブアプリケーション。 次に、Web サービスを呼び出し、Web サービスから返される結果を確認します。

Visual Studio では、Web サービスと呼び出し元アプリケーション間で渡される SOAP メッセージも表示されます。

Web サービス アプリケーションをセットアップするための最初の前提条件は、以下の手順に従って実行できます。

この例では、システムに Visual Studio 2013 がインストールされていることを確認してください。

ステップ1) 最初のステップは、空の ASP.Net Web アプリケーションを作成することです。Visual Studio 2013 で、メニュー オプションの [ファイル] -> [新しいプロジェクト] をクリックします。

SOAPメッセージの例

[新しいプロジェクト] オプションをクリックすると、Visual Studio はプロジェクトの種類を選択し、プロジェクトの必要な詳細を入力するための別のダイアログ ボックスを表示します。これについては次の手順で説明します。

ステップ2) このステップでは、

  1. 最初に必ず選択してください C# ASP.NET Web アプリケーションの Web テンプレート。SOAP サービス プロジェクトを作成するには、プロジェクトがこのタイプである必要があります。このオプションを選択すると、Visual Studio は、Web ベースのアプリケーションに必要なファイルを追加するために必要な手順を実行します。
  2. プロジェクトに名前を付けます。この例では webservice.asmx とします。 次に、プロジェクト ファイルが保存される場所を指定してください。

SOAPメッセージの例

完了すると、Visual Studio 2013 のソリューション エクスプローラーに作成されたプロジェクト ファイルが表示されます。

SOAPメッセージの例

ステップ3) このステップでは、

Web サービス ファイルをプロジェクトに追加します

  1. まず、以下に示すようにプロジェクトファイルを右クリックします

SOAPメッセージの例

  1. プロジェクト ファイルを右クリックすると、[追加] -> [Web サービス (ASMX)] オプションを選択して Web サービス ファイルを追加できます。 Web サービス名ファイルに Tutorial Service の名前を指定するだけです。

SOAPメッセージの例

ステップ4) 次のコードを Tutorial Service asmx ファイルに追加します。

SOAPメッセージの例

コードの説明:

  1. このコード行は、Web サービス ファイルの名前を指定します。 これは、クライアント アプリケーションが Web サービスの名前を介して Web サービスを呼び出すことができるようになるため、重要な手順です。
  2. 通常、クラス ファイルは Web サービスの機能をカプセル化するために使用されます。 したがって、クラス ファイルには、クライアント アプリケーションに何らかの機能を提供するすべての Web メソッドの定義が含まれます。
  3. ここで、[WebMethod]は機能を記述する属性として知られています。 後続のステップでは、「Guru99WebService」という関数を作成しますが、[WebMethod] 属性を追加するこのステップを含めることで、このメソッドがクライアント アプリケーションから確実に呼び出せるようになります。 この属性が設定されていない場合、クライアント アプリケーションからメソッドを呼び出すことはできません。
  4. ここでは、呼び出し元のクライアント アプリケーションに文字列を返すために使用される「Guru99WebService」という関数を定義しています。 この関数は、任意のクライアント アプリケーションから呼び出すことができる Web サービスです。
  5. return ステートメントを使用して、文字列「これは Guru99 Web サービスです」をクライアント アプリケーションに返します。

コードが正常に実行された場合、ブラウザでコードを実行すると次の出力が表示されます。

出力:

SOAPメッセージの例

  • 出力には、Web サービスの名前が「Guru99 Web Service」であることが明確に示されています。これは、Web サービスに名前を付けた結果です。
  • Web サービスを呼び出すことができることもわかります。 「Invoke」ボタンをクリックすると、Web ブラウザーで以下の応答が返されます。

SOAPメッセージの例

上記の出力、

  • Web メソッドを呼び出すと、「This is a Guru99 Web service」という文字列が返されることが明確に示されています。
  • Visual Studio では、上記の Web サービスが呼び出されたときに生成される SOAP メッセージの要求と応答を表示することもできます。

Webサービス呼び出し時に生成されるSOAPリクエストを以下に示します。

SOAPメッセージの例

コードの説明:

  1. SOAP メッセージの最初の部分は、前の章で説明したエンベロープ要素です。 これは、すべての SOAP メッセージに存在するカプセル化要素です。
  2. SOAP 本文は次の要素であり、SOAP メッセージの実際の詳細が含まれます。
  3. 99 番目の部分は、「GuruXNUMXWebService」というサービスを呼び出すことを指定する要素です。

SOAPメッセージの例

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <soap:Body>
      
        <Guru99WebServiceResponse xmlns="http://tempuri.org/">
          
            <Guru99WebServiceResult>string</Guru99WebServiceResult>
          
        </Guru99WebServiceResponse>
    </soap:Body>
</soap:Envelope>

コードの説明:

  1. SOAP メッセージの最初の部分は、前の章で説明したエンベロープ要素です。 これは、すべての SOAP メッセージに存在するカプセル化要素です。
  2. SOAP 本文は次の要素であり、SOAP メッセージの実際の詳細が含まれます。
  3. ここで注目すべき興味深い部分は、「string」属性です。これは、呼び出される Web サービスが文字列型のオブジェクトを返すことをクライアント アプリケーションに伝えます。これが非常に役立つのは、クライアント アプリケーションが Web サービスが返すものを認識できないためです。

まとめ

  • SOAP は、異なる上に構築されたアプリケーション間でデータを交換するために使用されるプロトコルです。 プログラミング言語.
  • SOAP は XML 仕様に基づいて構築されており、HTTP プロトコルで動作します。 そのため、Web アプリケーション内での使用に最適です。
  • SOAP ビルディング ブロックは、SOAP メッセージで構成されます。 各 SOAP メッセージは、エンベロープ要素、ヘッダー、ボディ要素で構成されます。
  • エンベロープ要素は SOAP メッセージの必須要素であり、SOAP メッセージ内のすべてのデータをカプセル化するために使用されます。
  • ヘッダー要素は、認証情報や複雑なデータ型の定義などの情報を含めるために使用できます。
  • body 要素は、Web メソッドの定義と、必要に応じてパラメータ情報が含まれる主要な要素です。