Arbeitet man mit Web­ser­vices, spielen ver­schie­de­ne Techniken eine große Rolle. Neben SOAP und REST ist das vor allem die Be­schrei­bungs­spra­che WSDL. Mit dieser werden die Funk­tio­nen eines Web­ser­vice be­schrie­ben, damit andere Netz­teil­neh­mer die Dienste auch in Anspruch nehmen können. Wie funk­tio­niert die Sprache, wofür benötigt man die WSDL-File genau und welche Ver­bin­dun­gen gibt es zu anderen Sprachen?

Was bedeutet WSDL?

WSDL steht für Web Service De­scrip­ti­on Language. Es handelt sich also um eine Me­ta­spra­che, mit der Web­ser­vices umfassend be­schrie­ben werden können. Ein Web­ser­vice wiederum ist ein Dienst, den ein Server über das Internet (oder einem anderen Netzwerk) Clients zur Verfügung stellt. Das funk­tio­niert platt­form­un­ab­hän­gig – also zwischen un­ter­schied­lichs­ten Systemen und An­wen­dun­gen. Damit ein Client sich über die Mög­lich­kei­ten und Verfahren des Web­ser­vice in­for­mie­ren kann, steht auf dem Server eine WSDL-Datei zur Verfügung. Durch die in der Datei ver­mit­tel­ten Details weiß der Client, wie er den Web­ser­vice aufrufen kann.

WSDL baut auf der Ex­ten­si­ble Markup Language (XML) bzw. dem XML-Schema (XSD) auf. Das heißt: In WSDL verwendet man XML-Elemente.

Fakt

WSDL ist vom World Wide Web Con­sor­ti­um (W3C) stan­dar­di­siert.

Aufbau und Ei­gen­schaf­ten von WSDL

Zur Be­schrei­bung von Web­ser­vices benutzt WSDL abstrakte und konkrete Be­schrei­bun­gen. Während sich die abstrakte Be­schrei­bung auf den Funk­ti­ons­um­fang des Dienstes bezieht, werden mit der konkreten Be­schrei­bung klare Fakten wie etwa das Über­tra­gungs­pro­to­koll über­mit­telt. Das Dokument (also die WSDL-Datei) ist hier­ar­chisch aufgebaut. In­for­ma­tio­nen stellt man daher ge­schach­telt dar.

Aus XML übernimmt WSDL sechs Haupt­ele­men­te:

  • types: Da­ten­ty­pen
  • messages: Be­schrei­bung der zu über­tra­ge­nen Daten
  • interface: abstrakte Ope­ra­tio­nen, die die Kom­mu­ni­ka­ti­on zwischen Server und Client be­schrei­ben (hieß in einer älteren Version des Standards noch portType)
  • binding: Auskunft über das ver­wen­de­te Trans­port­pro­to­koll
  • endpoint: In­for­ma­tio­nen über die Kom­mu­ni­ka­ti­ons­schnitt­stel­le, ge­wöhn­lich in Form einer URI (hieß in einer älteren Version des Standards noch port)
  • service: Zu­gangs­punk­te des Web­ser­vice

Wenn man in der Datei alle Elemente ausfüllt, erhält der Client alle be­nö­tig­ten In­for­ma­tio­nen zur Nutzung des Web­ser­vice. Gerade deshalb ist ein Web­ser­vice platt­form­un­ab­hän­gig, denn die un­ter­schied­li­chen Systeme erhalten die ge­mein­sa­me Sprache durch die WSDL-File.

WSDL Beispiel

Den Aufbau einer WSDL-Datei be­trach­ten wir nun an einem Beispiel näher. Der folgende Code soll für einen Web­ser­vice dienen, der ein einfaches „Hello World“ zu­rück­gibt.

<?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 Be­stand­tei­le einer WSDL-Datei gut erkennen. Nach einer an­fäng­li­chen Ein­lei­tung, in der auch ein Verweis auf WSDL und XSD enthalten ist, folgen die abs­trak­ten Be­schrei­bun­gen types, messages und interface. Die zweite Hälfte besteht schließ­lich aus den konkreten Be­schrei­bun­gen, wobei endpoint in service ein­ge­glie­dert ist.

Zum Hauptmenü