Per lavorare con i Web service si uti­liz­za­no diversi strumenti, come SOAP e REST, nonché na­tu­ral­men­te il lin­guag­gio WSDL. Questo lin­guag­gio descrive le funzioni di un servizio web in modo che anche altri par­te­ci­pan­ti alla rete possano uti­liz­za­re tali servizi. Come funziona WSDL, a cosa serve esat­ta­men­te il file WSDL e cosa ha in comune con gli altri linguaggi?

Cosa significa WSDL?

WSDL sta per Web Services De­scrip­tion Language. Si tratta quindi di un me­ta­lin­guag­gio con il quale i servizi web possono essere descritti in modo esaustivo. Un servizio web è un servizio che un server mette a di­spo­si­zio­ne dei client tramite Internet (o altra rete) e il cui fun­zio­na­men­to è in­di­pen­den­te dalla piat­ta­for­ma, quindi è com­pa­ti­bi­le con diversi sistemi e ap­pli­ca­zio­ni. Il server mette a di­spo­si­zio­ne un file WSDL che consente a un client di accedere a tutte le in­for­ma­zio­ni relative alle pos­si­bi­li­tà e alle procedure del servizio web. I dettagli forniti nel file indicano al client come chiamare il servizio web.

WSDL si basa sul lin­guag­gio XML (Ex­ten­si­ble Markup Language) o XML Schema (XSD). Questo significa che in WSDL vengono uti­liz­za­ti elementi XML.

Fatto

WSDL è stan­dar­diz­za­to dal World Wide Web Con­sor­tium (W3C).

Struttura e proprietà di WSDL

WSDL usa de­scri­zio­ni astratte e concrete per de­scri­ve­re i servizi web. Mentre la de­scri­zio­ne astratta si riferisce all’ambito fun­zio­na­le del servizio, la de­scri­zio­ne concreta fornisce in­for­ma­zio­ni su ca­rat­te­ri­sti­che pratiche, come il pro­to­col­lo di tra­smis­sio­ne. Il documento (ovvero il file WSDL) ha una struttura ge­rar­chi­ca. Le in­for­ma­zio­ni sono quindi pre­sen­ta­te in forma annidata.

WSDL riprende da XML sei elementi prin­ci­pa­li:

  • types: tipi di dati
  • messages: de­scri­zio­ne dei dati da tra­sfe­ri­re
  • interface: ope­ra­zio­ni astratte che de­scri­vo­no la co­mu­ni­ca­zio­ne tra server e client (chiamato portType in una versione pre­ce­den­te dello standard)
  • binding: in­for­ma­zio­ni sul pro­to­col­lo di trasporto uti­liz­za­to
  • endpoint: in­for­ma­zio­ni sull’in­ter­fac­cia di co­mu­ni­ca­zio­ne, so­li­ta­men­te sotto forma di URI (chiamato port in una versione pre­ce­den­te dello standard)
  • service: punti di accesso al servizio web

Se si compilano tutti gli elementi del file, il client riceve tutte le in­for­ma­zio­ni ne­ces­sa­rie per uti­liz­za­re il servizio web. Questo è il motivo per cui un servizio web è in­di­pen­den­te dalla piat­ta­for­ma, perché i diversi sistemi ricevono un lin­guag­gio comune at­tra­ver­so il file WSDL.

Esempio di WSDL

Esa­mi­nia­mo ora la struttura di un file WSDL at­tra­ver­so un esempio. Il codice seguente è destinato a un servizio web che re­sti­tui­sce un semplice “Hello World”.

<?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>

Nell’esempio di codice sorgente è possibile in­di­vi­dua­re fa­cil­men­te i singoli com­po­nen­ti di un file WSDL. Dopo una prima in­tro­du­zio­ne, che contiene anche un ri­fe­ri­men­to a WSDL e XSD, seguono le de­scri­zio­ni astratte di types, messages e interface. La seconda parte è co­sti­tui­ta infine dalle de­scri­zio­ni concrete, dove endpoint è annidato in service.

Vai al menu prin­ci­pa­le