Web Services Description Language
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
[bewerken | brontekst bewerken]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
[bewerken | brontekst bewerken]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>