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サービスを見つける方法