Webサービス記述言語(WSDL / ˈ w ɪ z d əl /)は、Webサービスが提供する機能を記述するために使用されるXMLベースのインターフェース記述言語です。この略語は、Webサービスの特定のWSDL記述(WSDLファイルとも呼ばれます)にも使用され、サービスの呼び出し方法、期待されるパラメータ、および返されるデータ構造を機械可読な形式で記述します。したがって、その目的は、プログラミング言語における型シグネチャにほぼ相当します。
2007年にW3C勧告となったWSDLの最新バージョンはWSDL 2.0です。この略語の意味は、バージョン1.1の「D」が「Definition(定義)」を意味していたのとは異なります。

WSDLは、サービスをネットワークエンドポイント、すなわちポートの集合として記述します。WSDL仕様では、この目的のためにドキュメント用のXML形式が提供されています。ポートとメッセージの抽象的な定義は、具体的な使用例やインスタンスから分離されているため、これらの定義を再利用できます。ポートは、ネットワークアドレスを再利用可能なバインディングに関連付けることで定義され、ポートの集合がサービスを定義します。メッセージは交換されるデータの抽象的な記述であり、ポートタイプはサポートされている操作の抽象的な集合です。特定のポートタイプの具体的なプロトコルとデータ形式の仕様は、再利用可能なバインディングを構成し、そこで操作とメッセージが具体的なネットワークプロトコルとメッセージ形式にバインドされます。このようにして、WSDLはWebサービスのパブリックインターフェースを記述します。
WSDLは、インターネット経由でWebサービスを提供するために、SOAPおよびXMLスキーマと組み合わせて使用されることがよくあります。Webサービスに接続するクライアントプログラムは、WSDLファイルを読み取って、サーバー上で利用可能な操作を判断できます。使用される特殊なデータ型は、XMLスキーマの形式でWSDLファイルに埋め込まれます。クライアントは、SOAPを使用して、たとえばHTTP経由のXMLなどを用いて、WSDLファイルにリストされている操作のいずれかを実際に呼び出すことができます。
現在の仕様のバージョンは 2.0 です。バージョン 1.1 はW3Cによって承認されていませんが、バージョン 2.0 はW3C の勧告です。[ 1 ] WSDL 1.2 は WSDL 1.1 と大きく異なるため、WSDL 2.0 に改名されました。すべてのHTTP リクエスト メソッド(バージョン 1.1 のように GET と POST だけでなく) へのバインディングを受け入れることで、WSDL 2.0 仕様はRESTful Web サービスをより良くサポートし、実装がはるかに簡単になります。[ 2 ] [ 3 ]ただし、この仕様のサポートは、WSDL 1.1 用のツールのみを提供する Web サービス用のソフトウェア開発キットではまだ不十分です。例えば、ビジネスプロセス実行言語(BPEL)のバージョン2.0は、WSDL 1.1のみをサポートしています。
<?xml version="1.0" encoding="UTF-8"?> <description 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" ><documentation>これはWSDL 2.0ドキュメントのサンプルです。</documentation><!-- 抽象型 --> <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><!-- 抽象インターフェース --> <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><!-- HTTP による具体的なバインディング --> <binding name= "HttpBinding" interface= "tns:Interface1" type= "http://www.w3.org/ns/wsdl/http" > <operation ref= "tns:Get" whttp:method= "GET" /> </binding> <!-- 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 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> </description>WSDL 1.0(2000年9月)は、IBM、Microsoft、およびAribaによって、SOAPツールキット用のWebサービスを記述するために開発されました。これは、IBMのNASSL (Network Application Service Specification Language)とMicrosoftのSDL (Service Description Language)という2つのサービス記述言語を組み合わせて構築されました。
2001年3月に公開されたWSDL 1.1は、WSDL 1.0を正式に規格化したものです。1.0と1.1の間には大きな変更はありませんでした。
WSDL 1.2(2003年6月)はW3Cの作業草案でしたが、WSDL 2.0となりました。W3Cによると、WSDL 1.2は以前のバージョンよりも開発者にとって使いやすく、柔軟性が高いとのことです。WSDL 1.2では、相互運用性のない機能を削除し、HTTP 1.1バインディングをより適切に定義しています。ただし、WSDL 1.2はほとんどのSOAPサーバー/ベンダーではサポートされていませんでした。
WSDL 2.0は2007年6月にW3C勧告となりました。WSDL 1.2はWSDL 1.1と大きく異なるため、WSDL 2.0に名称変更されました。変更点は以下のとおりです。
サブセット WSDL (SWSDL) [ 4 ]は、元の WSDL のサブセット操作を含む WSDL です。開発者は SWSDL を使用してサブセット サービスにアクセスし、Web サービス コードのサブセットを処理できます。サブセット WSDL は、Web サービスのテストやトップダウン開発に使用できます。サブセット WSDL を使用してサブセット サービスにアクセスすることで、Web サービスのスライスを行うことができます。サブセット サービスは、SWSDL を使用してレイヤーに分類できます。SWSDL は、Web サービスの分析、テスト、およびトップダウン開発に使用されます。AWSCM [ 5 ]は、WSDL ファイル内のサブセット操作を識別してサブセット WSDL を構築できるツールです。
WSDLファイルはWebサービスを記述するためのXMLベースの仕様であるため、WSDLファイルは攻撃を受けやすい。[ 6 ] これらのファイルの脆弱性を軽減するために、生成されたWSDLファイルへのアクセスを制限し、WSDL定義に適切なアクセス制限を設定し、Webサービスで不要な定義を避けることが推奨される。