WSDL(Web Services Description Language) は、Webサービスの機能、入力、出力、通信方法を記述するためのXMLベースの標準形式です。主にSOAP(Simple Object Access Protocol)を使用するWebサービスで利用され、クライアントがWebサービスと通信するための「契約書」として機能します。
WSDLの主な役割
- Webサービスの定義:
- サービスが提供する機能(操作)や、どのようなデータを受け取り、どのようなデータを返すかを記述します。
- 相互運用性の提供:
- 異なるプラットフォームや言語間での通信を容易にします。
- 自動生成:
- WSDLファイルをもとに、クライアントコードやサーバーコードを自動生成できるツールが多く存在します(例: Apache CXF, .NET WSDLツール)。
WSDLの構成要素
WSDLは、以下の要素で構成されています:
<types>
:- データ型を定義します。通常、XSD(XML Schema Definition)を使って記述されます。
- 例:<types> <xsd:schema> <xsd:element name=”request” type=”xsd:string”/> </xsd:schema> </types>
<message>
:- 入力データ(リクエスト)や出力データ(レスポンス)を記述します。
- 例:
<message name="GetGreetingRequest"> <part name="name" type="xsd:string"/> </message>
<portType>
:- Webサービスの操作(メソッド)を定義します。
- 例:
<portType name="GreetingPortType"> <operation name="GetGreeting"> <input message="tns:GetGreetingRequest"/> <output message="tns:GetGreetingResponse"/> </operation> </portType>
<binding>
:- 実際のプロトコル(例: SOAP)やデータのフォーマットを記述します。
- 例:
<binding name="GreetingBinding" type="tns:GreetingPortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetGreeting"> <soap:operation soapAction="GetGreeting"/> </operation> </binding>
<service>
:- サービスエンドポイント(URL)を指定します。
- 例:
service name="GreetingService"> <port name="GreetingPort" binding="tns:GreetingBinding"> <soap:address location="http://example.com/greeting"/> </port> </service>
WSDLの例
以下は、単純なWSDLファイルの例です:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="GreetingService">
<types>
<xsd:schema>
<xsd:element name="GetGreetingRequest" type="xsd:string"/>
<xsd:element name="GetGreetingResponse" type="xsd:string"/>
</xsd:schema>
</types>
<message name="GetGreetingRequest">
<part name="name" element="xsd:string"/>
</message>
<message name="GetGreetingResponse">
<part name="greeting" element="xsd:string"/>
</message>
<portType name="GreetingPortType">
<operation name="GetGreeting">
<input message="tns:GetGreetingRequest"/>
<output message="tns:GetGreetingResponse"/>
</operation>
</portType>
<binding name="GreetingBinding" type="tns:GreetingPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetGreeting">
<soap:operation soapAction="GetGreeting"/>
</operation>
</binding>
<service name="GreetingService">
<port name="GreetingPort" binding="tns:GreetingBinding">
<soap:address location="http://example.com/greeting"/>
</port>
</service>
</definitions>
WSDLの活用シナリオ
- SOAP Webサービスのインタフェース定義:
- クライアントとサーバー間での通信プロトコルを明確化。
- コード生成:
- 開発者がWSDLをもとに自動でクライアントやサーバーコードを生成。
- 例:
wsimport
(Java)、svcutil
(.NET)。
- テストツールとの統合:
- PostmanやSoapUIなどのツールでWSDLファイルをインポートし、APIテストを実行。
WSDLの注意点
- SOAP特化:
- REST APIなどには適用されない。RESTの場合はWSDLではなく、Swagger(OpenAPI)が利用される。
- XMLの冗長性:
- WSDLの記述が長く複雑になることがある。
- 依存性の管理:
- クライアントとサーバーでWSDLのバージョンが異なると、互換性の問題が発生する可能性がある。
まとめ
WSDLは、SOAP Webサービスの設計・実装において欠かせない仕様であり、サービスの構造や通信方法を標準化するための重要な役割を果たします。ただし、REST APIの台頭により、近年ではSwaggerやOpenAPIのような新しい仕様に取って代わられるケースも増えています。それでも、企業システムやレガシーシステムでは、WSDLは依然として広く利用されています。