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

SOAPとは何ですか?

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

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

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

石鹸の紹介

今日の世界には、さまざまなプログラミング言語で構築された膨大な数のアプリケーションがあります。 たとえば、Java で設計された Web アプリケーション、.Net で設計された Web アプリケーション、および .Net で設計された Web アプリケーションが存在する可能性があります。 PHP.

今日のネットワーク化された世界では、アプリケーション間でデータを交換することが重要です。 しかし、これらの異種間のデータ交換neo私たちのアプリケーションはcomになりますplex。 コムもそうなるだろうplexこのデータ交換を実行するためのコードの種類。

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

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

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

SOAP は HTTP 経由で XML を操作できるように設計されており、すべてのアプリケーションで使用できる何らかの仕様を備えています。さらに詳しく調べてみますtails 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の下図 archiこの構造は、SOAP メッセージのさまざまな構成要素を示しています。

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

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

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

com の単純な SOAP サービスの例plex タイプを以下に示します。

「チュートリアル名」と「チュートリアルの説明」を組み合わせた構造化データ型を送信したいと仮定すると、com を定義します。plex 以下のように入力します。

コムplex タイプは要素タグによって定義されますplexタイプ>。 構造体の必要なすべての要素とそれぞれのデータ型は、com ファイルで定義されます。plex タイプコレクション。

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

SOAPメッセージの構造

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

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

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

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

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

SOAPメッセージの構造

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

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

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

SOAP エンベロープ要素

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

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

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

次のことwing ポイントは 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 Fault メッセージは次の内容で構成されます。wing 要素。

  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 サービスをホストしていると仮定します。

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

通常の 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 サービス アプリケーションをセットアップするための最初の前提条件は、次のように実行できます。wing 以下の手順に従ってください。

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

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

SOAPメッセージの例

「新規プロジェクト」オプションをクリックすると、 Visual Studio 別のダイアログが表示されます box プロジェクトの種類を選択し、必要な情報を提供するためtails プロジェクトの。これについては次のステップで説明します。

ステップ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) 以下を追加wing コードをチュートリアル サービスの asmx ファイルに追加します。

SOAPメッセージの例

コードの説明:

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

コードが正常に実行されると、次のようになります。wing ブラウザでコードを実行すると、出力が表示されます。

出力:

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 本文は次の要素であり、実際の内容が含まれています。tails 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 本文は次の要素であり、実際の内容が含まれています。tails SOAP メッセージの。
  3. これから見る興味深い部分は、「string」属性です。これにより、呼び出された Web サービスが文字列型のオブジェクトを返すことがクライアント アプリケーションに伝えられます。これは、他のクライアント アプリケーションを使用する場合に非常に便利です。wise Web サービスが何を返すかわかりません。

まとめ

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