SOAPメッセージとWSDLの違いは何ですか?


102

SOAPメッセージとWSDLがどのように組み合わされるかについて混乱していますか?私は次のようなSOAPメッセージの調査を始めました。

    POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

すべてのSOAPメッセージはWSDLですか?SOAPは、独自の「SOAPメッセージ」または「WSDL」を受け入れるプロトコルですか?それらが異なる場合、SOAPメッセージをいつ使用し、いつWSDLを使用する必要がありますか?

これに関するいくつかの明確化は素晴らしいでしょう。


1
wsdlは、送信できるメッセージと応答として期待できるものの仕様です。ある意味では、WSDLドキュメントはSOAP通信には必要ありませんが、プロトコルによっては必須要素です。
troelskn 2013年

回答:


121

SOAPドキュメントはリクエストごとに送信されます。私たちが書店で、特定の本の現在の価格を知るために問い合わせるリモートサーバーがあったとします。本のタイトル、ページ数、ISBN番号をサーバーに渡す必要があるとしましょう。

価格を知りたいときはいつでも、独自のSOAPメッセージを送信します。これは次のようになります。

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

そして、次のようなSOAP応答メッセージが返されることを期待しています。

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

次に、WSDLは、サーバーが受信したときにこのメッセージを処理/処理する方法を記述します。この例では、タイトル、NumPages、ISBNのタイプ、GetBookPriceメッセージからの応答を予期する必要があるかどうか、およびその応答がどのように見えるかについて説明しています。

タイプは次のようになります。

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

ただし、WSDLには、操作を行うために相互にリンクする関数、サービスで使用可能な操作、およびサービスにアクセスできるネットワーク上の場所に関する詳細情報も含まれています。

W3アノテーション付きWSDLの例も参照してください。


4
この行を言うと、「WSDLは、サーバーが受信したときにこのメッセージを処理/処理する方法を記述します。」ここに何かおかしいと思いませんか。WSDLは、クライアントがクライアントに公開されているサービスを知るためのものです。サーバーへのメッセージの処理や処理をガイドしているとは思いません。私は理にかなっていますか?
2015

76

SOAPメッセージは、データの送信に使用されるXMLドキュメントです。WSDLは、Webサービスに接続してリクエストを行う方法を記述したXMLドキュメントです。

基本的にSOAPメッセージはあなたが送信するデータであり、WSDLはあなたに何ができるか、そしてどのように呼び出しを行うかを教えてくれます。

Googleでクイック検索を行うと、追加の参考資料が多数提供されます(以前の本へのリンクが無効になり、これに対抗するために、新しい推奨事項がコメントに追加されます)。

特定の質問に注意してください:

すべてのSOAPメッセージはWSDLですか?いいえ、まったく同じではありません。

SOAPは、独自の「SOAPメッセージ」または「WSDL」を受け入れるプロトコルですか?いいえ-これは遠く離れているため、読み取りが必要です。

それらが異なる場合、SOAPメッセージをいつ使用し、いつWSDLを使用する必要がありますか?石鹸は、転送のためにメッセージ/データに適用する構造です。WSDLは、そもそもサービスの呼び出し方法を決定するためにのみ使用されます。多くの場合、これは特定のWebサービスを呼び出すコードを最初に追加するときに一度だけです。


素晴らしいサンプルメッセージで説明できるとしたら、「一度だけ」の意味がわかりません。また、あなたはWSDLとSOAPメッセージが一緒に使用されていると言っていますか?
James

6
WSDLは、Webサービスを呼び出す方法を示します。多くの場合、WSDLを使用してWebサービスを呼び出すコードを自動生成し、それを再び使用することはありません。リンクした本の章をざっと読むと参考になります。
Matthew

27

WSDL(Webサービス定義言語)は、Webサービスを記述するメタデータファイルです。

操作名、パラメーターなどのようなもの

soapメッセージは実際のペイロードです


25

2つ(SOAPとWSDL)がWebサービスのコンポーネントであるSOAPとWSDLの違いを説明する前に、Webサービスとは何かを定義する必要があります。

ほとんどのアプリケーションはユーザーと対話するように開発されており、ユーザーはインターフェースを介してデータを入力または検索し、アプリケーションはユーザーの入力に応答します。

Webサービスアプリケーションは、マシン間またはアプリケーション間でのみ通信することを除いて、ほぼ同じことを行います。多くの場合、直接的なユーザー操作はありません。

Webサービスは基本的に、アプリケーション間でデータを交換するために使用されるオープンプロトコルのコレクションです。オープンプロトコルを使用すると、Webサービスをプラットフォームに依存しないようにすることができます。さまざまなプログラミング言語で記述され、さまざまなプラットフォームで実行されるソフトウェアは、Webサービスを使用して、インターネットなどのコンピューターネットワークを介してデータを交換できます。言い換えると、Windowsアプリケーションは、PHP、Java、Perlアプリケーション、および他の多くのアプリケーションと通信できますが、通常の状況ではこれは不可能です。

Webサービスはどのように機能しますか?

異なるアプリケーションは異なるプログラミング言語で作成されているため、相互に通信できないことがよくあります。Webサービスは、オープンなプロトコルと標準、主にXML、SOAP、WSDLの組み合わせを使用して、この通信を可能にします。WebサービスはXMLを使用してデータにタグを付け、SOAPはメッセージを転送し、最後にWSDLを使用してサービスの可用性を記述します。Webサービスアプリケーションのこれら3つの主要コンポーネントを見てみましょう。

シンプルオブジェクトアクセスプロトコル(SOAP)

Simple Object Access Protocol(SOAP)は、相互運用性の問題に直面することなく、アプリケーション間でメッセージを送受信するためのプロトコルです(相互運用性とは、Webサービスが実行されているプラ​​ットフォームが無関係になることを意味します)。同様の機能を持つ別のプロトコルはHTTPです。Webページへのアクセスやネットサーフィンに使用されます。HTTPを使用すると、ApacheかIISか、その他のWebサーバーが、表示しているページを提供するのか、または表示したページがASP.NETまたはHTMLで作成されたのかを心配する必要がなくなります。

SOAPは要求と応答の両方に使用されるため、その内容は目的に応じて若干異なります。

以下は、SOAP要求および応答メッセージの例です。

SOAPリクエスト:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

SOAP応答:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

どちらのメッセージも同じように見えますが、実行するメソッドは異なります。たとえば、上記の例を見ると、リクエストメッセージがGetBookPriceメソッドを使用して本の価格を取得していることがわかります。応答はGetBookPriceResponseメソッドによって実行されます。これは、「リクエスタ」として表示されるメッセージになります。メッセージがXMLを使用して構成されていることもわかります。

Webサービス記述言語またはWSDL

WSDLは、Webサービスを説明し、そのメソッドにアクセスして使用する方法を説明するドキュメントです。

WSDLは、インターネット上で偶然見つけたWebサービスで使用可能なメソッドをどのようにして知るかを処理します。

サンプルのWSDLファイルを見てください。

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

WSDLファイルについて覚えておくべき主なことは、WSDLファイルが以下を提供することです。

  • Webサービスの説明

  • Webサービスが使用するメソッドとWebサービスが取るパラメーター

  • Webサービスを見つける方法


  • 具体的な説明
    TapanHP

    7

    電話より良い例え:通信販売サービスから郵便で製品を注文する。WSDLドキュメントは、サービスプロバイダーが受け入れる種類の注文フォームを作成する方法を説明する手順のようなものです。SOAPメッセージは、世界中のすべての郵便局が処理方法を知っている標準設計(サイズ、形状、構造)のエンベロープのようなものです。注文フォームをそのような封筒に入れます。ネットワーク(インターネットなど)は郵便サービスです。封筒を郵便に入れます。郵便局の職員は封筒の中を見ません。ペイロードXMLは、エンベロープに同封した注文フォームです。郵便局が封筒を配達した後、Webサービスプロバイダーは封筒を開き、注文フォームを処理します。フォームを作成して正しく入力した場合は、


    4

    簡単に言えば、電卓のWebサービスがある場合。WSDLは、クライアントに実装または公開できる関数について通知します。例:追加、削除、減算など。SOAPを使用するのと同じように、実際にはdoDelete()、doSubtract()、doAdd()などのアクションを実行します。したがって、SOAPとWSDLはリンゴとオレンジです。それらを比較すべきではありません。どちらにも独自の機能があります。


    1

    SOAP:オープンスタンダードのXMLベースの通信プロトコルで、ユーザーからWebサービスへ、またはその逆で情報を交換するために使用されます。石鹸は、データがいくつかの方法で編成されている単なるドキュメントです。リクエストとレスポンスごとに別々の石鹸が存在する場合があります。

    WSDL:SOAPでは、データは何らかの方法で編成され、この編成はWSDLで指定されます。使用する必要があるデータ型もここで指定されます。要求と応答の場合、単一のWSDLが存在します


    0

    WSDLは、APIプロバイダーとそれがWebサービスを記述するクライアントとの間の一種のコントラクトです。パブリック関数、オプション/必須フィールド...

    しかし、soapメッセージはクライアントとプロバイダーの間で転送されるデータです(ペイロード)


    0

    WSDLは、送信側と受信側の間のインターフェースとして機能します。
    SOAPメッセージは、XML形式の要求と応答です。

    Java RMIとの比較

    WSDLは、
    SOAPメッセージがマーシャリングされた要求および応答メッセージのインターフェースクラスです。


    -1

    電話はその番号がwsdlであり、情報の交換は石鹸であると考えることができます。

    WSDLは通信サーバーとの接続方法の説明です。SOAPには通信メッセージがあります。


    1
    いいえ、電話番号は、WSDLで定義されているエンドポイントの1つに似ています。電話の分野では、WSDLに相当するものはありません。最も近いのは電話帳です。特に、ビジネスを分類し、電話番号だけでなく、ビジネスに関する詳細を提供する「イエローページ」の概念を含める場合は特にそうです。
    John Saunders
    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.