Web Services Description Language

Web Services Description Language (WSDL ウィズダル) とは、Webサービス記述言語の意で、SOAPによるXML Webサービスのインタフェースを記述するインタフェース記述言語。通常その表現にはXMLを使う。WSDLは、サービスの呼出方法、それが期待するパラメータ群、それが返すデータ型について、機械可読な形式の記述を提供する。従って、その目的はプログラミング言語におけるメソッド・シグネチャの役割に似ている。

WSDLの現在のバージョンはWSDL 2.0である。省略語WSDLにおけるDの意味はバージョン1.1当時の「Definition」から変更されている。

 説明 

WSDLはサービスをネットワーク上の「endpoint」または「port」の集合として記述する。この目的を果たす文書の仕様としてWSDL仕様は一つのXMLフォーマットを提供する。「port」や「message」の抽象的な定義は、それらの具体的な仕様や実体とは分離されている。それにより、これらの定義の再利用も可能になっている。「port」とは、ネットワークアドレスを再利用可能な「binding」で対応づけることにより定義され、「port」の集団として「service」が定義される。「message」とは交換されるデータを抽象的に表現した言い方であり、「port type」とはサポートされている「operation」の抽象的な集団である。特定の「port type」のための具象的なプロトコルとデータ形式の仕様が再利用可能な「binding」を構成し、そこで「operation」と「message」が具象的なネットワークプロトコルとメッセージ形式に対応づけられる。このようにして、WSDLはWebサービスへの公開インタフェースを記述する。

WSDLはSOAPとXMLスキーマと組み合わせて、インターネット上にWebサービスを提供するために使われることが多い。Webサービスに接続するクライアント側のプログラムはWSDLファイルを読んで、そのサーバでどのような操作が可能なのかを知ることができる。利用される何らかの特殊なデータ型もWSDLファイル内にXMLスキーマの形で埋め込まれている。するとクライアントはSOAPを使ってWSDLファイル内に挙げられている操作の内の一つを実際に呼び出すことが出来る（例えばHTTP上でXMLを交換する)。

WSDL仕様の現在のバージョンは2.0である。; バージョン 1.1は W3Cの推奨を受けていなかったが、バージョン2.0 はW3C勧告である。 WSDL 1.2 が WSDL 2.0 に名称変更された。その理由はWSDL 1.1とは本質的に異なるからである。

（バージョン1.1当時のGETとPOSTだけでなく）全てのHTTPリクエストメソッド を受け付けることで、WSDL 2.0仕様はRESTfulなウェブサービスのよりよくサポートでき、実装するのもより簡単になった。

用語

 WSDL 1.1用語  WSDL 2.0用語 説明 Service  Service  
Webベースのプロトコルに公開されているシステム機能群の集合 Port  Endpoint  
Webサービスへのアドレスまたはコネクション・ポイントを定義したもの。単純なHTTPのURL文字列で表すのが一般的である。 Binding  Binding  
インタフェースを指定し、SOAPの結合スタイル (binding style) (RPC/Document) とトランスポート（SOAPプロトコル）を定義するもの。binding節はoperationも定義する。 PortType  Interface  Webサービス、実行可能な操作や、その操作を実行するために使われるメッセージを定義したもの。 Operation  Operation  
SOAPアクション、およびメッセージのエンコード方法（例えば「literal」など）を定義したもの。operationは伝統的なプログラミング言語におけるメソッドや関数呼び出しのようなものである。 Message  なし  
典型的に、一つのmessageは一つのoperationと対応している。messageはoperationを実行するのに必要な情報を含む。各messageは一つ或いは複数の論理的部分により構成される。各部分はmessage-typing属性と対応している。message name属性は全messageの中での一意な名前を提供する。part name属性は、それを含むmessage内の各partの中での一意な名前を提供する。各partはmessageの論理的な構成要素を記述したものである。RPC bindingでは、bindingはpartに関するbinding固有の情報を指定するためにpartの名前を参照してよい。一つのpartはmessage内の一つのパラメータを表せる：bindingがpartの実際の意味を定義する。MessageはWSDL 2.0では廃止された。WSDL 2.0ではXMLスキーマ型で入出力本体を定義し、faultsは単純に直接参照される。 Types  Types  データを記述したもの。XMLスキーマ言語（XSDとしても知られる）を使う。

 WSDLファイル サンプル 
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.w3.org/ns/wsdl" 
             xmlns:tns="http://www.tmsws.com/wsdl20sample" 
             xmlns:whttp="http://schemas.xmlsoap.org/wsdl/http/"
             xmlns:wsoap="http://schemas.xmlsoap.org/wsdl/soap/"
             targetNamespace="http://www.tmsws.com/wsdl20sample">

<!-- Abstract type -->
   <types>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns="http://www.tmsws.com/wsdl20sample"
                targetNamespace="http://www.example.com/wsdl20sample">

         <xs:element name="request"> ... </xs:element>
         <xs:element name="response"> ... </xs:element>
      </xs:schema>
   </types>

<!-- Abstract interfaces -->
   <interface name="Interface1">
      <fault name="Error1" element="tns:response"/>
      <operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
         <input messageLabel="In" element="tns:request"/>
         <output messageLabel="Out" element="tns:response"/>
      </operation>
   </interface>

<!-- Concrete Binding Over HTTP -->
   <binding name="HttpBinding" interface="tns:Interface1" 
            type="http://www.w3.org/ns/wsdl/http">
      <operation ref="tns:Get" whttp:method="GET"/>
   </binding>

<!-- Concrete Binding with SOAP-->
   <binding name="SoapBinding" interface="tns:Interface1" 
            type="http://www.w3.org/ns/wsdl/soap" 
            wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
            wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
      <operation ref="tns:Get" />
   </binding>

<!-- Web Service offering endpoints for both bindings-->
   <service name="Service1" interface="tns:Interface1">
      <endpoint name="HttpEndpoint" 
                binding="tns:HttpBinding" 
                address="http://www.example.com/rest/"/>
      <endpoint name="SoapEndpoint" 
                binding="tns:SoapBinding" 
                address="http://www.example.com/soap/"/>
   </service>
</definitions>

関連技術
SOAP (プロトコル)
Webサービス
UDDI
Extensible Markup Language (XML)
Web Services Interoperability (WS-I)

外部リンク

Category:Webサービス
Category:XMLベースの技術
Category:長大な項目名