Wsdl-quick-guide
WSDL-はじめに
WSDLは、Webサービス記述言語の略です。 これは、Webサービスを記述するための標準形式です。 WSDLは、MicrosoftとIBMが共同で開発しました。
WSDLの機能
- WSDLは、分散環境および分散環境での情報交換のためのXMLベースのプロトコルです。
- WSDL定義は、Webサービスにアクセスする方法と、Webサービスが実行する操作を記述します。
- WSDLは、XMLベースのサービスとのインターフェイス方法を記述するための言語です。
- WSDLは、XMLベースの世界的なビジネスレジストリであるUniversal Description、Discovery、and Integration(UDDI)の不可欠な部分です。
- WSDLは、UDDIが使用する言語です。
- WSDLは「wiz-dull」と発音され、「W-S-D-L」と綴られます。
WSDLの使用
WSDLは、インターネット経由でWebサービスを提供するために、SOAPおよびXMLスキーマと組み合わせて使用されることがよくあります。 Webサービスに接続するクライアントプログラムは、WSDLを読み取って、サーバーで使用可能な機能を判断できます。 使用される特別なデータ型は、XMLスキーマの形式でWSDLファイルに埋め込まれます。 その後、クライアントはSOAPを使用して、WSDLにリストされている関数の1つを実際に呼び出すことができます。
WSDLの歴史
2001年3月に、XMLプロトコルに関するW3C XMLアクティビティのサービスを説明するために、WSDL 1.1がAriba、IBM、MicrosoftからW3C Noteとして提出されました。
WSDL 1.1はWorld Wide Web Consortium(W3C)によって承認されていませんが、勧告(公式標準)となるバージョン2.0のドラフトをリリースしたばかりであり、W3Cによって承認されています。
WSDL-要素
WSDLは、Webサービスを3つの特定の識別可能な要素に分割します。これらの要素は、定義すると結合または再利用できます。
個別に定義できるWSDLの3つの主要な要素は-
- タイプ
- オペレーション
- 製本
WSDLドキュメントにはさまざまな要素がありますが、これらの3つの主要な要素に含まれており、個別のドキュメントとして開発し、それらを結合または再利用して完全なWSDLファイルを形成できます。
WSDL要素
WSDLドキュメントには、次の要素が含まれています-
- 定義-すべてのWSDLドキュメントのルート要素です。 Webサービスの名前を定義し、ドキュメントの残りの部分で使用される複数の名前空間を宣言し、ここで説明するすべてのサービス要素を含みます。
- データ型-メッセージで使用されるデータ型は、XMLスキーマの形式です。
- メッセージ-ドキュメント全体またはメソッド呼び出しにマッピングされる引数として提示されるメッセージの形式でのデータの抽象的な定義です。
- 操作-これは、メソッド、メッセージキュー、またはビジネスプロセスの命名など、メッセージを受け入れて処理するメッセージの操作の抽象的な定義です。
- ポートタイプ-これは、バインディングの操作のコレクションを定義する、1つまたは複数のエンドポイントにマッピングされる操作の抽象的なセットです。操作のコレクションは抽象的であるため、さまざまなバインディングを介して複数のトランスポートにマップできます。
- バインディング-特定のポートタイプに定義された操作とメッセージの具体的なプロトコルとデータ形式です。
- ポート-バインディングとネットワークアドレスの組み合わせであり、サービス通信のターゲットアドレスを提供します。
- サービス-ファイル内のサービス定義を含む関連するエンドポイントのコレクションです。サービスはバインディングをポートにマップし、拡張性の定義を含めます。
これらの主要な要素に加えて、WSDL仕様は次のユーティリティ要素も定義しています-
- ドキュメント-この要素は人間が読めるドキュメントを提供するために使用され、他のWSDL要素内に含めることができます。
- Import -この要素は、他のWSDLドキュメントまたはXMLスキーマをインポートするために使用されます。
注-WSDLパーツは通常、Webサービス対応ツールを使用して自動的に生成されます。
WSDLドキュメントの構造
WSDLドキュメントの主な構造は次のようになります-
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
<operation>
definition of a operation.......
</operation>
</portType>
<binding>
definition of a binding....
</binding>
<service>
definition of a service....
</service>
</definitions>
WSDLドキュメントには、拡張要素や、複数のWebサービスの定義を1つのWSDLドキュメントでグループ化できるサービス要素など、他の要素も含めることができます。
WSDLドキュメントの例を分析するためにさらに進みます。
WSDL-例
以下に示すのは、単純なWSDLプログラムを示すために提供されるWSDLファイルです。
サービスが_sayHello_と呼ばれる単一の公的に利用可能な関数を提供すると仮定しましょう。 この関数は、単一の文字列パラメーターを想定し、単一の文字列グリーティングを返します。 たとえば、パラメータ_world_を渡すと、サービス関数_sayHello_は「Hello、world!」という挨拶を返します。
例
HelloService.wsdlファイルの内容-
<definitions name = "HelloService"
targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/"/>
</port>
</service>
</definitions>
分析例
- 定義-HelloService
- Type -組み込みデータ型を使用し、XMLSchemaで定義されています。
- メッセージ-
- sayHelloRequest-firstNameパラメーター
- sayHelloresponse-挨拶の戻り値
- ポートタイプ-要求と応答サービスで構成されるsayHello操作。
- Binding -SOAP HTTPトランスポートプロトコルを使用する方向。
- サービス-http://www.examples.com/SayHello/で利用可能なサービス
- ポート-実行中のサービスにアクセスできるURI [[1]]
WSDL-<definition>要素
*<definitions>* 要素は、すべてのWSDLドキュメントのルート要素でなければなりません。 Webサービスの名前を定義します。
以下は、_definitions_要素を使用する最後の章のコードです。
<definitions name="HelloService"
targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
................................................
</definitions>
上記の例から、definitions-
- 他のすべての要素のコンテナです。
- このドキュメントが_HelloService_と呼ばれることを指定します。
- _targetNamespace_属性を指定します。 _targetNamespace_は、WSDLドキュメントが自身を参照できるようにするXMLスキーマの規則です。 この例では、http://www.examples.com/wsdl/HelloService.wsdlの_targetNamespace_を指定しています。
- デフォルトのネームスペースを指定します:xmlns = http://schemas.xmlsoap.org/wsdl/。 したがって、_message_や_portType_など、名前空間プレフィックスのないすべての要素は、デフォルトのWSDL名前空間の一部であると想定されます。
- ドキュメントの残りの部分で使用される多数の名前空間を指定します。
注-名前空間の仕様では、指定された場所にドキュメントが存在する必要はありません。 重要な点は、定義されている他のすべてのネームスペースとは異なる一意の値を指定することです。
WSDL-<types>要素
Webサービスでは、入力と出力、およびサービスへの入出力のマッピング方法を定義する必要があります。 WSDL <types> 要素は、Webサービスで使用されるデータ型の定義を処理します。 タイプはXMLドキュメント、またはドキュメントパーツです。
- _types_要素は、クライアントとサーバー間で使用されるすべてのデータ型を記述します。
- WSDLは、特定のタイピングシステムだけに結び付けられているわけではありません。
- WSDLは、W3C XMLスキーマ仕様をデフォルトの選択肢として使用して、データ型を定義します。
- サービスが文字列や整数などのXMLスキーマの組み込み単純型のみを使用する場合、_types_要素は必要ありません。
- WSDLでは、複数のWebサービスでタイプを再利用できるように、タイプを個別の要素で定義できます。
以下は、W3C仕様から取ったコードです。 このコードは、WSDL内で_types_要素を使用する方法を示しています。
<types>
<schema targetNamespace = "http://example.com/stockquote.xsd"
xmlns = "http://www.w3.org/2000/10/XMLSchema">
<element name = "TradePriceRequest">
<complexType>
<all>
<element name = "tickerSymbol" type = "string"/>
</all>
</complexType>
</element>
<element name = "TradePrice">
<complexType>
<all>
<element name = "price" type = "float"/>
</all>
</complexType>
</element>
</schema>
</types>
データ型は、Webサービスで使用する予定のデータ型と形式を識別する問題に対処します。 タイプ情報は、送信者と受信者の間で共有されます。 したがって、メッセージの受信者は、データのエンコードに使用した情報にアクセスする必要があり、データのデコード方法を理解する必要があります。
WSDL-<message>要素
*<message>* 要素は、Webサービスプロバイダーとコンシューマーの間で交換されるデータを記述します。
- 各Webサービスには、入力と出力の2つのメッセージがあります。
- 入力はWebサービスのパラメーターを記述し、出力はWebサービスからの戻りデータを記述します。
- 各メッセージには、Webサービス関数の各パラメーターに1つずつ、0個以上の <part> パラメーターが含まれます。
- 各 <part> パラメーターは、 <types> コンテナー要素で定義された具象型に関連付けられます。
WSDLの例の章からコードの一部を取りましょう-
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
ここでは、2つのメッセージ要素が定義されています。 最初は要求メッセージ_SayHelloRequest_を表し、2番目は応答メッセージ_SayHelloResponse_を表します。
これらの各メッセージには、単一の要素が含まれます。 要求の場合、パーツは関数パラメーターを指定します。この場合、単一の_firstName_パラメーターを指定します。 応答の場合、パーツは関数の戻り値を指定します。この場合、単一の挨拶の戻り値を指定します。
WSDL-<portType>要素
*<portType>* 要素は、複数のメッセージ要素を組み合わせて、一方向または往復の完全な操作を形成します。
たとえば、 <portType> は、1つの要求と1つの応答メッセージを1つの要求/応答操作に結合できます。 これは、SOAPサービスで最も一般的に使用されています。 portTypeは複数の操作を定義できます。
WSDLの例の章からコードの一部を取りましょう-
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
- portType要素は、_sayHello_と呼ばれる単一の操作を定義します。
- 操作は、単一の入力メッセージ_SayHelloRequest_と *出力メッセージ_SayHelloResponse_。
動作パターン
WSDLは、操作の4つの基本パターンをサポートしています-
一方通行
サービスはメッセージを受信します。 したがって、操作には単一の_input_要素があります。 一方向の操作の文法は-
<wsdl:definitions .... >
<wsdl:portType .... >*
<wsdl:operation name = "nmtoken">
<wsdl:input name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
リクエスト・レスポンス
サービスはメッセージを受信し、応答を送信します。 したがって、操作には1つの_input_要素があり、その後に1つの_output_要素が続きます。 エラーをカプセル化するために、オプションの_fault_要素も指定できます。 要求/応答操作の文法は次のとおりです-
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
要請応答
サービスはメッセージを送信し、応答を受信します。 したがって、操作には1つの_output_要素があり、その後に1つの_input_要素が続きます。 エラーをカプセル化するために、オプションの_fault_要素も指定できます。 要請応答操作の文法は-
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
お知らせ
サービスはメッセージを送信します。 したがって、操作には単一の_output_要素があります。 以下は、通知操作の文法です-
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:output name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
WSDL-<binding>要素
*<binding>* 要素は、_portType_操作が実際にワイヤ経由で送信される方法に関する特定の詳細を提供します。
- バインディングは、HTTP GET、HTTP POST、またはSOAPを含む複数のトランスポートを介して利用可能にできます。
- バインディングは、_portType_操作の転送に使用されているプロトコルに関する具体的な情報を提供します。
- バインディングは、サービスが配置されている場所の情報を提供します。
- SOAPプロトコルの場合、バインディングは <soap:binding> であり、トランスポートはHTTPプロトコルの上にあるSOAPメッセージです。
- 1つの_portType_に対して複数のバインディングを指定できます。
バインディング要素には、_name_属性と_type_属性の2つの属性があります。
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
_name_属性はバインディングの名前を定義し、type属性はバインディングのポート(この場合は「tns:Hello_PortType」ポート)を指します。
SOAPバインディング
WSDL 1.1には、SOAP 1.1の組み込み拡張機能が含まれています。 SOAPヘッダー、SOAPエンコードスタイル、SOAPAction HTTPヘッダーなど、SOAP固有の詳細を指定できます。 SOAP拡張要素には次のものが含まれます-
- soap:結合
- 石鹸:操作
- 石鹸:ボディ
soap:結合
この要素は、SOAPを介してバインディングが利用可能になることを示します。 _style_属性は、SOAPメッセージ形式の全体的なスタイルを示します。 _rpc_のスタイル値は、RPC形式を指定します。
_transport_属性は、SOAPメッセージのトランスポートを示します。 値http://schemas.xmlsoap.org/soap/httpはSOAP HTTPトランスポートを示し、http://schemas.xmlsoap.org/soap/smtpはSOAP SMTPトランスポートを示します。
石鹸:操作
この要素は、特定の操作の特定のSOAP実装へのバインディングを示します。 _soapAction_属性は、サービスを識別するためにSOAPAction HTTPヘッダーを使用することを指定します。
石鹸:ボディ
この要素を使用すると、入力メッセージと出力メッセージの詳細を指定できます。 HelloWorldの場合、body要素は、指定されたサービスに関連付けられたSOAPエンコーディングスタイルと名前空間URNを指定します。
ここに例の章からのコードの一部があります-
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
WSDL-<ports>要素
*<port>* 要素は、バインディングに単一のアドレスを指定することにより、個々のエンドポイントを定義します。
これは、ポートを指定するための文法です-
<wsdl:definitions .... >
<wsdl:service .... > *
<wsdl:port name = "nmtoken" binding = "qname"> *
<-- extensibility element (1) -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
- port要素には、_name_と_binding_の2つの属性があります。
- _name_属性は、囲まれているWSDLドキュメント内で定義されているすべてのポートの中で一意の名前を提供します。
- バインディング属性は、WSDLで定義されたリンク規則を使用したバインディングを参照します。
- バインディング拡張要素は、ポートのアドレス情報を指定するために使用されます。
- ポートは複数のアドレスを指定してはなりません。
- ポートは、アドレス情報以外のバインディング情報を指定してはなりません。
ここに例の章からのコードの一部があります-
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
WSDL-<service>要素
*<service>* 要素は、Webサービスでサポートされるポートを定義します。 サポートされているプロトコルごとに、1つのポート要素があります。 サービス要素はポートのコレクションです。
- Webサービスクライアントは、サービス要素から以下を学ぶことができます-
- サービスにアクセスする場所、
- どのポートを介してWebサービスにアクセスするか、および
- 通信メッセージの定義方法。
- サービス要素には、人間が読めるドキュメントを提供するドキュメント要素が含まれています。
ここに例の章からのコードの一部があります-
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
_port_要素のバインディング属性は、サービスのアドレスをWebサービスで定義されたバインディング要素に関連付けます。 この例では、これは_Hello_Binding_です
<binding name =" Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
WSDL-まとめ
このチュートリアルでは、WSDLの基本について説明しました。 次のステップは、SOAP、UDDI、およびWebサービスを学習することです。
ウェブサービス
Webサービスは、データを交換するために他のWebアプリケーションと対話するオープンスタンダード(XML、SOAP、HTTPなど)Webアプリケーションです。
Webサービスの詳細については、link:/webservices/index [Webサービスチュートリアル]にアクセスしてください。
UDDI
UDDIは、Webサービスを記述、公開、検索するためのXMLベースの標準です。
UDDIの詳細については、link:/uddi/index [UDDIチュートリアル]にアクセスしてください。
SOAP
SOAPは、アプリケーションがHTTP経由で情報を交換できるようにする単純なXMLベースのプロトコルです。
SOAPの詳細については、link:/soap/index [SOAPチュートリアル]をご覧ください。
WSDL-参照
あなたの会社、ウェブサイト、または本をWSDLリソースとしてリストアップすることに興味がある場合は、webmaster @ finddevguides.comまでご連絡ください。
WSDL仕様のリスト
Specification | Draft/Proposal | W3C Recommendation |
WSDL 1.1 Note | 15. Mar 2001 | |
WSDL Usage Scenarios | 04. Jun 2002 | |
WSDL Requirements | 28. Oct 2002 | |
WSDL Architecture | 11. Feb 2004 | |
WSDL Glossary | 11. Feb 2004 | |
WSDL Usage Scenarios | 11. Feb 2004 | |
WSDL 1.2 Core Language | 11. Jun 2003 | |
WSDL 1.2 Message Patterns | 11. Jun 2003 | |
WSDL 1.2 Bindings | 11. Jun 2003 | |
WSDL 2.0 Primer | 27. Mar 2006 | |
WSDL 2.0 Core Language | 27. Mar 2006 | |
WSDL 2.0 Adjuncts | 27. Mar 2006 | |
WSDL 2.0 SOAP 1.1 Binding | 27. Mar 2006 | |
WSDL 2.0 RDF Mapping | 18. May 2006 | |
WS Addressing Core | 09. May 2006 | |
WS Addressing SOAP Binding | 09. May 2006 | |
Web Architecture | 15. Dec 2004 |