Web Services Description Language
WSDL (Web Services Description Language) je jazykem pro popis funkcí, jež nabízí tzv. webová služba, a dále pro popis vstupů a výstupů těchto funkcí (jinými slovy, co webová služba poskytuje a jak si o to říci). Jelikož webová služba v principu komunikuje protokolem SOAP, WSDL zpravidla popisuje SOAP komunikaci. WSDL vychází z formátu XML.
Podporované operace a zprávy jsou popsány abstraktně, a potom se omezují na konkrétní síťový protokol a formát zprávy. Z toho plyne, že WSDL popisuje veřejné rozhraní webové služby.
Popis
WSDL popisuje služby jako kolekce síťových koncových bodů neboli portů. Specifikace WSDL poskytuje pro tento účel formát XML pro dokumenty. Abstraktní definice portů a zpráv jsou odděleny od jejich konkrétního použití nebo instance, což umožňuje opětovné použití těchto definic. Port je definován přidružením síťové adresy k opakovaně použitelné vazbě a kolekce portů definuje službu. Zprávy jsou abstraktní popisy vyměňovaných dat a typy portů jsou abstraktní kolekce podporovaných operací. Konkrétní specifikace protokolu a datového formátu pro konkrétní typ portu tvoří opakovaně použitelnou vazbu, kde jsou operace a zprávy vázány na konkrétní síťový protokol a formát zprávy. Tímto způsobem WSDL popisuje veřejné rozhraní webové služby.
Příklad WSDL dokumentu
<?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>
This is a sample WSDL 2.0 document.
</documentation>
<!-- 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>
</description>