SOAP Webサービスチュートリアル:SOAPプロトコルとは?

⚡ スマートサマリー

SOAP(Simple Object Access Protocol)は、HTTP経由でWebサービスにアクセスするためのXMLベースのプロトコルです。この資料では、SOAPの構成要素、メッセージ構造、エンベロープ要素とフォールト要素、通信モデル、およびASMX Webサービスの具体的な例について説明します。

  • 📦 コアプロトコル: SOAPは、トランスポートに依存しないXMLベースのメッセージングプロトコルであり、異なる言語で構築されたアプリケーションがHTTPを介してデータを交換することを可能にします。
  • 🧱 ビルディングブロック: SOAPメッセージは、エンベロープ、オプションのヘッダー、ボディ、およびオプションのフォルト要素で構成されます。
  • ✉️ エンベロープ要素: 必須のルートエンベロープはメッセージをカプセル化し、クライアントアプリケーションにメッセージの開始と終了を通知します。
  • 🔁 コミュニケーションモデル: クライアントはリクエストをSOAPメッセージにマーシャリングし、サーバーはそれをデマーシャリングしてSOAPレスポンスを返す。これらすべてはHTTPを介して行われる。
  • 🛠️ 実践例: Visual Studio の ASMX Web サービスは、呼び出し元のクライアント向けに SOAP リクエストおよびレスポンス メッセージを自動的に生成します。

SOAPプロトコルとは何か

SOAPとは何ですか?

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

SOAPはSimple Object Access Protocolの略称ですが、後にSOAP v1.2と略されるようになりました。SOAPはプロトコル、つまりWebサービス同士、あるいはWebサービスを呼び出すクライアントアプリケーションとの通信方法を定義したものです。

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

石鹸の紹介

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

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

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

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

しかし、データ交換におけるXMLの利用に関して、すべてのプログラミング言語に共通する標準仕様は存在しない。そこでSOAPソフトウェアが登場する。

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

SOAPの利点

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

  • 開発時ping SOAPベースのWebサービスでは、Webサービスがクライアントアプリケーションと通信するための言語が必要です。SOAPは、この目的を達成するために開発された最適な手段です。このプロトコルは、すべてのWeb標準を統括する組織であるW3Cコンソーシアムによっても推奨されています。
  • SOAP は、アプリケーション間のデータ交換に使用される軽量プロトコルです。 キーワード「」に注意してください。SOAPプログラミングは軽量データ交換言語であるXML言語に基づいているため、プロトコルとしてのSOAPも同じカテゴリに分類されます。
  • SOAPはプラットフォームに依存しないように設計されています。また、オペレーティングシステムにも依存しないように設計されています。そのため、SOAPプロトコルは、あらゆるプログラミング言語ベースのアプリケーションで動作し、どちらの環境でも使用できます。 Windows (NAIST) と Linux プラットフォーム。
  • SOAPはHTTPプロトコル上で動作します。HTTPプロトコルは、すべてのWebアプリケーションで使用されるデフォルトのプロトコルです。そのため、SOAPプロトコルに基づいて構築されたWebサービスをWorld Wide Web上で動作させるために、特別なカスタマイズは一切必要ありません。

SOAP ビルディング ブロック

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

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

SOAP ビルディング ブロック

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

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

複合型のシンプルなSOAPサービスの例を以下に示します。ここでは、「チュートリアル名」と「チュートリアル」の組み合わせを持つ構造化データ型を送信したいとします。 Descriptイオン」の場合、以下のように複合型を定義します。複合型は要素タグによって定義されます。構造体の必要な要素すべてと、それぞれのデータ型は、複合型コレクション内で定義されます。

<xsd:complexType>
   <xsd:sequence>
      <xsd:element name="Tutorial Name" type="string"/>
      <xsd:element name="Tutorial Description" type="string"/>
   </xsd:sequence>
</xsd:complexType>

A ボディ 呼び出しと応答情報を含む要素 – この要素には、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. 私たちのメッセージには、次の名前のウェブサービスが含まれています。Guru99Webサービス」
  4. 「Guru99Webservice”は、型が「int」で名前がTutorialIDであるパラメータを受け入れます。

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

上記の情報がクライアントアプリケーションにとってどれほど有用であるかがお分かりいただけるでしょう。SOAPメッセージは、Webサービスの名前、Webサービスが期待するパラメータ、そしてWebサービスが受け取る各パラメータの型をクライアントアプリケーションに伝えます。

SOAP エンベロープ要素

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

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

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

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

  • すべてのSOAPメッセージには、ルート要素としてEnvelope要素が必要です。SOAPメッセージにEnvelope要素が含まれることは絶対に必須です。
  • すべての 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. <faultCode> これはエラーコードを示すコードです。エラーコードは以下のいずれかの値になります。
    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通信モデル(RPCスタイル)

上記の通信モデルには、以下のような重大な制約がある。

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

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

SOAP通信モデル SOAPスタイル

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

実践的な SOAP の例

今これで SoapUI チュートリアルでは、SOAPの実践的な例を見てみましょう。SOAPメッセージがどのように生成されるかを理解する最良の方法の1つは、実際にWebサービスが動作している様子を見ることです。

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

ASMX Web サービスは自動的に Web サービス定義言語 (WSDL) 書類。 この WSDL ドキュメントは、呼び出し側クライアント アプリケーションが 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サービスファイル名には「チュートリアルサービス」という名前を入力してください。

SOAPメッセージの例:Webサービスを追加する

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

SOAPメッセージの例(Webサービスコード)

Code 説明:

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

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

出力:

SOAPメッセージの出力例

  • 出力には、当社のウェブサービスの名前が「Guru「99 Web Service」は、当社のウェブサービスに名前を付けた結果です。
  • また、Webサービスを呼び出すことができることもわかります。「呼び出し」ボタンをクリックすると、Webブラウザに以下の応答が表示されます。

SOAPメッセージの例 呼び出し応答

上記の出力:

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

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

SOAPメッセージの例 SOAPリクエスト

Code 説明:

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

SOAPメッセージの例、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>

Code 説明:

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

よくあるご質問

AIは自然言語からSOAPリクエストを生成し、WSDLに基づいてエンベロープを検証し、不正な形式または疑わしいメッセージを検出できます。レガシーエンタープライズシステムでは、AIアシスタントは開発者が古いSOAPサービスをより迅速に理解し、保守するのに役立ちます。

はい。AIツールは、サンプルSOAPエンベロープの自動生成、障害シナリオの作成、エンドポイントの回帰テストの構築が可能です。開発者は、使用前に生成されたXMLを確認し、名前空間、データ型、セキュリティヘッダーが正しいことを確認する必要があります。

SOAPは、セキュリティとエラー処理に関する標準規格が組み込まれた、厳格なXMLベースのプロトコルです。一方、RESTはHTTPメソッドとJSONを多用する、より軽量なアーキテクチャスタイルです。SOAPは企業内の正式なシステム統合に適していますが、RESTは公開Web APIで広く利用されています。

はい。新しいパブリックAPIではRESTが主流ですが、SOAPは強力なセキュリティと正式な認証を必要とする企業、銀行、決済、通信システムで依然として広く使われています。tracts (WSDL) および信頼性の高いメッセージング。多くのレガシー統合は、依然として SOAP Web サービスに依存しています。