WSDL-Tutorial: Web Service Description Language erklärt
Arbeitet man mit Webservices, spielen verschiedene Techniken eine große Rolle. Neben SOAP und REST ist das vor allem die Beschreibungssprache WSDL. Mit dieser werden die Funktionen eines Webservice beschrieben, damit andere Netzteilnehmer die Dienste auch in Anspruch nehmen können. Wie funktioniert die Sprache, wofür benötigt man die WSDL-File genau und welche Verbindungen gibt es zu anderen Sprachen?
Was bedeutet WSDL?
WSDL steht für Web Service Description Language. Es handelt sich also um eine Metasprache, mit der Webservices umfassend beschrieben werden können. Ein Webservice wiederum ist ein Dienst, den ein Server über das Internet (oder einem anderen Netzwerk) Clients zur Verfügung stellt. Das funktioniert plattformunabhängig – also zwischen unterschiedlichsten Systemen und Anwendungen. Damit ein Client sich über die Möglichkeiten und Verfahren des Webservice informieren kann, steht auf dem Server eine WSDL-Datei zur Verfügung. Durch die in der Datei vermittelten Details weiß der Client, wie er den Webservice aufrufen kann.
WSDL baut auf der Extensible Markup Language (XML) bzw. dem XML-Schema (XSD) auf. Das heißt: In WSDL verwendet man XML-Elemente.
WSDL ist vom World Wide Web Consortium (W3C) standardisiert.
Aufbau und Eigenschaften von WSDL
Zur Beschreibung von Webservices benutzt WSDL abstrakte und konkrete Beschreibungen. Während sich die abstrakte Beschreibung auf den Funktionsumfang des Dienstes bezieht, werden mit der konkreten Beschreibung klare Fakten wie etwa das Übertragungsprotokoll übermittelt. Das Dokument (also die WSDL-Datei) ist hierarchisch aufgebaut. Informationen stellt man daher geschachtelt dar.
Aus XML übernimmt WSDL sechs Hauptelemente:
- types: Datentypen
- messages: Beschreibung der zu übertragenen Daten
- interface: abstrakte Operationen, die die Kommunikation zwischen Server und Client beschreiben (hieß in einer älteren Version des Standards noch portType)
- binding: Auskunft über das verwendete Transportprotokoll
- endpoint: Informationen über die Kommunikationsschnittstelle, gewöhnlich in Form einer URI (hieß in einer älteren Version des Standards noch port)
- service: Zugangspunkte des Webservice
Wenn man in der Datei alle Elemente ausfüllt, erhält der Client alle benötigten Informationen zur Nutzung des Webservice. Gerade deshalb ist ein Webservice plattformunabhängig, denn die unterschiedlichen Systeme erhalten die gemeinsame Sprache durch die WSDL-File.
WSDL Beispiel
Den Aufbau einer WSDL-Datei betrachten wir nun an einem Beispiel näher. Der folgende Code soll für einen Webservice dienen, der ein einfaches „Hello World“ zurückgibt.
<?xml version="1.0"?>
<definitions name="HelloWorld"
targetNamespace="http://example.com/helloworld.wsdl"
xmlns:tns="http://example.com/helloworld.wsdl"
xmlns:xsd1="http://example.com/helloworld.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema targetNamespace="http://example.com/helloworld.xsd"
xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="HelloWordElement">
<complexType>
<all>
<element name="worldRequest" type="string"/>
</all>
</complexType>
</element>
</schema>
</types>
<message name = "HelloWorldRequest">
<part name = "name" type = "xsd:string"/>
</message>
<message name = "HelloWorldResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<interface name = "HelloWorld_Interface">
<operation name = "sayHelloWorld">
<input message = "tns:HelloWorldRequest"/>
<output message = "tns:HelloWorldResponse"/>
</operation>
</interface>
<binding name = "HelloWorld_Binding" type = "tns:HelloWorld_Interface">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHelloWorld">
<soap:operation soapAction = "sayHelloWorld"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloworld"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloworld"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_World">
<documentation>WSDL File for HelloWorld</documentation>
<endpoint binding = "tns:HelloWorld_Binding" name = "HelloWorld_Endpoint">
<soap:address
location = "http://www.example.com/HelloWorld/" />
</endpoint>
</service>
</definitions>
In dem Quelltext-Beispiel kann man die einzelnen Bestandteile einer WSDL-Datei gut erkennen. Nach einer anfänglichen Einleitung, in der auch ein Verweis auf WSDL und XSD enthalten ist, folgen die abstrakten Beschreibungen types, messages und interface. Die zweite Hälfte besteht schließlich aus den konkreten Beschreibungen, wobei endpoint in service eingegliedert ist.