WSDL tutorial: spiegazione del Web Services Description Language
Per lavorare con i Web service si utilizzano diversi strumenti, come SOAP e REST, nonché naturalmente il linguaggio WSDL. Questo linguaggio descrive le funzioni di un servizio web in modo che anche altri partecipanti alla rete possano utilizzare tali servizi. Come funziona WSDL, a cosa serve esattamente il file WSDL e cosa ha in comune con gli altri linguaggi?
Cosa significa WSDL?
WSDL sta per Web Services Description Language. Si tratta quindi di un metalinguaggio con il quale i servizi web possono essere descritti in modo esaustivo. Un servizio web è un servizio che un server mette a disposizione dei client tramite Internet (o altra rete) e il cui funzionamento è indipendente dalla piattaforma, quindi è compatibile con diversi sistemi e applicazioni. Il server mette a disposizione un file WSDL che consente a un client di accedere a tutte le informazioni relative alle possibilità e alle procedure del servizio web. I dettagli forniti nel file indicano al client come chiamare il servizio web.
WSDL si basa sul linguaggio XML (Extensible Markup Language) o XML Schema (XSD). Questo significa che in WSDL vengono utilizzati elementi XML.
WSDL è standardizzato dal World Wide Web Consortium (W3C).
Struttura e proprietà di WSDL
WSDL usa descrizioni astratte e concrete per descrivere i servizi web. Mentre la descrizione astratta si riferisce all’ambito funzionale del servizio, la descrizione concreta fornisce informazioni su caratteristiche pratiche, come il protocollo di trasmissione. Il documento (ovvero il file WSDL) ha una struttura gerarchica. Le informazioni sono quindi presentate in forma annidata.
WSDL riprende da XML sei elementi principali:
- types: tipi di dati
- messages: descrizione dei dati da trasferire
- interface: operazioni astratte che descrivono la comunicazione tra server e client (chiamato portType in una versione precedente dello standard)
- binding: informazioni sul protocollo di trasporto utilizzato
- endpoint: informazioni sull’interfaccia di comunicazione, solitamente sotto forma di URI (chiamato port in una versione precedente dello standard)
- service: punti di accesso al servizio web
Se si compilano tutti gli elementi del file, il client riceve tutte le informazioni necessarie per utilizzare il servizio web. Questo è il motivo per cui un servizio web è indipendente dalla piattaforma, perché i diversi sistemi ricevono un linguaggio comune attraverso il file WSDL.
Esempio di WSDL
Esaminiamo ora la struttura di un file WSDL attraverso un esempio. Il codice seguente è destinato a un servizio web che restituisce 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 individuare facilmente i singoli componenti di un file WSDL. Dopo una prima introduzione, che contiene anche un riferimento a WSDL e XSD, seguono le descrizioni astratte di types, messages e interface. La seconda parte è costituita infine dalle descrizioni concrete, dove endpoint è annidato in service.