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をいつ使用する必要がありますか?
これに関するいくつかの明確化は素晴らしいでしょう。
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 Annotated WSDL Examples も参照してください
SOAPメッセージは、データの送信に使用されるXMLドキュメントです。 WSDLは、Webサービスに接続してリクエストを行う方法を記述したXMLドキュメントです。
基本的にSOAPメッセージは送信するデータであり、WSDLは何ができるか、どのように呼び出しを行うかを示します。
Googleですばやく検索すると、さらに読むための多くの情報源が得られます(以前の書籍のリンクは廃止されました。これに対処するために、新しい推奨事項がコメントに追加されます)
特定の質問に注意してください:
すべてSOAPメッセージWSDLですか?いいえ、それらはまったく同じものではありません。
SOAPは、独自の 'SOAPメッセージ'または 'WSDL'を受け入れるプロトコルですか?いいえ-これは遠いため、読み取りが必要です。
それらが異なる場合、いつSOAPメッセージを使用し、WSDLを使用する必要がありますか? SOAPは、転送のためにメッセージ/データに適用する構造です。 WSDLは、そもそもサービスを呼び出す方法を決定するためにのみ使用されます。多くの場合、これは、特定のWebサービスを呼び出すコードを最初に追加するときの1回限りのことです。
WSDL(Webサービス定義言語)は、Webサービスを記述するメタデータファイルです。
操作名、パラメーターなどのようなもの.
Soapメッセージは実際のペイロードです
2つ(SOAPとWSDL)がWebサービスのコンポーネントであるSOAPとWSDLの違いを伝える前に、Webサービスとは何かを定義する必要があります
ほとんどのアプリケーションはユーザーと対話するように開発されており、ユーザーはインターフェイスを介してデータを入力または検索し、アプリケーションはユーザーの入力に応答します。
Webサービスは、Webサービスアプリケーションがマシン間またはアプリケーション間でのみ通信することを除いて、ほぼ同じことを行います。多くの場合、ユーザーとの直接の対話はありません。
Webサービスは基本的に、アプリケーション間でデータを交換するために使用されるオープンプロトコルのコレクションです。オープンプロトコルを使用すると、Webサービスがプラットフォームに依存しなくなります。異なるプログラミング言語で作成され、異なるプラットフォームで実行されるソフトウェアは、Webサービスを使用して、インターネットなどのコンピューターネットワークを介してデータを交換できます。言い換えると、Windowsアプリケーションは、PHP、Java、Perlアプリケーションなど、通常の環境では不可能な多くのアプリケーションと通信できます。
Webサービスの仕組み
異なるアプリケーションは異なるプログラミング言語で記述されているため、多くの場合、相互に通信できません。 Webサービスは、オープンプロトコルと標準、主にXML、SOAPおよびWSDLの組み合わせを使用して、この通信を可能にします。 WebサービスはXMLを使用してデータにタグを付け、SOAPを使用してメッセージを転送し、最後にWSDLを使用してサービスの可用性を記述します。 Webサービスアプリケーションのこれら3つの主要なコンポーネントを見てみましょう。
Simple Object Access ProtocolまたはSOAPは、相互運用性の問題に直面せずにアプリケーション間でメッセージを送受信するためのプロトコルです(相互運用性とは、Webサービスが実行されているプラットフォームが無関係になることを意味します)。同様の機能を持つ別のプロトコルはHTTPです。 Webページへのアクセスやネットサーフィンに使用されます。 HTTPを使用すると、Apache、IIS、またはその他のWebサーバーの種類を心配する必要がなくなり、表示しているページを表示したり、表示するページがASPで作成されたかどうかを確認したりできます。 NETまたはHTML。
以下は、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を使用して構成されていることもわかります。
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ドキュメントは、サービスプロバイダーが受け入れる注文フォームの種類を作成する方法を説明する指示に似ています。 SOAPメッセージは、世界中のすべての郵便局が処理方法を知っている標準設計(サイズ、形状、構造)の封筒のようなものです。注文フォームをそのような封筒に入れます。ネットワーク(インターネットなど)は郵便サービスです。封筒を郵送します。郵便サービスの従業員は、封筒の内側を見ません。ペイロードXMLは、封筒に入れた注文フォームです。郵便局が封筒を配達した後、Webサービスプロバイダーは封筒を開き、注文フォームを処理します。フォームを正しく作成し、記入すると、注文した製品が郵送されます。
電卓のWebサービスがある場合、簡単に言えば。 WSDLは、クライアントに実装または公開できる機能について通知します。例:追加、削除、減算など。 SOAPを使用する場合、実際にはdoDelete()、doSubtract()、doAdd()などのアクションを実行します。したがって、SOAPとWSDLはリンゴとオレンジです。それらを比較するべきではありません。どちらも独自の異なる機能を備えています。
SOAP:ユーザーからWebサービスへ、またはその逆に情報を交換するために使用されるオープン標準のXMLベースの通信プロトコルです。 soapは、データが何らかの方法で整理された単なるドキュメントです。要求と応答ごとに、個別の石鹸が存在する場合があります。
WSDL:SOAPでは、データは何らかの方法で編成され、この編成はWSDLで指定されます。使用する必要があるデータタイプもここで指定されます。要求と応答の場合、単一のWSDLが存在します
WSDLは、APIプロバイダーとWebサービスを記述するクライアントとの間の一種のコントラクトです:public function、optional/requiredフィールド...
ただし、SOAPメッセージはクライアントとプロバイダーの間で転送されるデータです(ペイロード)
WSDLは、送信者と受信者の間のインターフェイスとして機能します。
SOAPメッセージは、xml形式の要求と応答です。
Java RMIと比較
WSDLはインターフェイスクラスです
SOAPメッセージは、マーシャリングされた要求および応答メッセージです。