Web Services Description Language

bestandsformaat van World Wide Web Consortium
(Doorverwezen vanaf WSDL)

Web Service Description Language, of kortweg WSDL is een XML-taal waarmee de interfaces van webservices kunnen worden beschreven. Over het algemeen zullen deze WSDL-documenten voornamelijk door applicaties gelezen worden en beschikbaar zijn voor aanroepende applicaties.

De binding-style en use van de WSDL

De WSDL binding beschrijft hoe de service gebruikmaakt van het berichtenprotocol, met name SOAP. Een WSDL SOAP binding kent 2 stijlsoorten: RPC (Remote Procedure Call) of Document. Het gebruik van een SOAP binding is of 'encoded' of 'literal'.Dit uit zich in de structuur van het te verzenden SOAP-bericht. Het is essentieel om te weten met welk soort WSDL-bestand je aan het werk bent. Sommige technieken, zoals JAX-WS ondersteunen alleen document/literal en niet rpc/encoded. En andere technieken vice versa.WS-I (Web Services Interoperability) Basic Profile schrijft het gebruik van document/literal voor.rpc/encoded wordt beschouwd als verouderd en dient niet meer gebruikt te worden.

Een WSDL-document hoeft niet manueel opgesteld te worden. Er zijn voor bijna elke programmeertaal hulpmiddelen aanwezig waarmee WSDL-documenten op eenvoudige wijze gegenereerd kunnen worden, om ze zodoende via SOAP aanroepbaar te maken.

Voorbeeld van een WSDL-bestand

Hier is een voorbeeld van een gestructureerd WSDL 2.0 document:

<?xml version="1.0" encoding="UTF-8"?><description xmlns="http://www.w3.org/ns/wsdl"              xmlns:tns="http://www.example.com/wsdl20sample"              xmlns:whttp="http://www.w3.org/ns/wsdl/http"             xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"             targetNamespace="http://www.example.com/wsdl20sample"><!-- Abstract types -->   <types>      <xs:schema xmlns="http://www.example.com/wsdl20sample"                 xmlns:xs="http://www.w3.org/2001/XMLSchema"                  targetNamespace="http://www.example.com/wsdl20sample">                          <xs:element name="request">            <xs:complexType>               <xs:sequence>                  <xs:element name="header" maxOccurs="unbounded">                     <xs:complexType>                        <xs:simpleContent>                           <xs:extension base="xs:string">                              <xs:attribute name="name" type="xs:string" use="required"/>                           </xs:extension>                        </xs:simpleContent>                     </xs:complexType>                  </xs:element>                  <xs:element name="body" type="xs:anyType" minOccurs="0"/>               </xs:sequence>               <xs:attribute name="method" type="xs:string" use="required"/>               <xs:attribute name="uri" type="xs:anyURI" use="required"/>            </xs:complexType>         </xs:element>                  <xs:element name="response">            <xs:complexType>               <xs:sequence>                  <xs:element name="header" maxOccurs="unbounded">                     <xs:complexType>                        <xs:simpleContent>                           <xs:extension base="xs:string">                              <xs:attribute name="name" type="xs:string" use="required"/>                           </xs:extension>                        </xs:simpleContent>                     </xs:complexType>                  </xs:element>                  <xs:element name="body" type="xs:anyType" minOccurs="0"/>               </xs:sequence>               <xs:attribute name="status-code" type="xs:anySimpleType" use="required"/>               <xs:attribute name="response-phrase" use="required"/>            </xs:complexType>         </xs:element>      </xs:schema>   </types><!-- Abstract interfaces -->   <interface name="RESTfulInterface">      <fault name="ClientError" element="tns:response"/>      <fault name="ServerError" element="tns:response"/>      <fault name="Redirection" element="tns:response"/>      <operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">         <input messageLabel="GetMsg" element="tns:request"/>         <output messageLabel="SuccessfulMsg" element="tns:response"/>      </operation>      <operation name="Post" pattern="http://www.w3.org/ns/wsdl/in-out">         <input messageLabel="PostMsg" element="tns:request"/>         <output messageLabel="SuccessfulMsg" element="tns:response"/>      </operation>      <operation name="Put" pattern="http://www.w3.org/ns/wsdl/in-out">         <input messageLabel="PutMsg" element="tns:request"/>         <output messageLabel="SuccessfulMsg" element="tns:response"/>      </operation>      <operation name="Delete" pattern="http://www.w3.org/ns/wsdl/in-out">         <input messageLabel="DeleteMsg" element="tns:request"/>         <output messageLabel="SuccessfulMsg" element="tns:response"/>      </operation>   </interface><!-- Concrete Binding Over HTTP -->   <binding name="RESTfulInterfaceHttpBinding" interface="tns:RESTfulInterface"             type="http://www.w3.org/ns/wsdl/http">      <operation ref="tns:Get" whttp:method="GET"/>      <operation ref="tns:Post" whttp:method="POST"                  whttp:inputSerialization="application/x-www-form-urlencoded"/>      <operation ref="tns:Put" whttp:method="PUT"                  whttp:inputSerialization="application/x-www-form-urlencoded"/>      <operation ref="tns:Delete" whttp:method="DELETE"/>   </binding>   <!-- Concrete Binding with SOAP-->   <binding name="RESTfulInterfaceSoapBinding" interface="tns:RESTfulInterface"             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" />      <operation ref="tns:Post" />      <operation ref="tns:Put" />      <operation ref="tns:Delete" />   </binding>   <!-- Web Service offering endpoints for both the bindings-->   <service name="RESTfulService" interface="tns:RESTfulInterface">      <endpoint name="RESTfulServiceRestEndpoint"                 binding="tns:RESTfulInterfaceHttpBinding"                 address="http://www.example.com/rest/"/>      <endpoint name="RESTfulServiceSoapEndpoint"                 binding="tns:RESTfulInterfaceSoapBinding"                 address="http://www.example.com/soap/"/>   </service></description>

Externe links