SoapUI - WSDL
WSDL è l'acronimo di Web Services Description Language. È un formato standard per descrivere un servizio web. WSDL è stato sviluppato congiuntamente da Microsoft e IBM. WSDL è pronunciato come "wiz-dull" e definito come "WSD-L".
WSDL ─ Una breve storia
WSDL 1.1 è stato presentato come nota W3C da Ariba, IBM e Microsoft per la descrizione dei servizi per l'attività XML del W3C sui protocolli XML nel marzo 2001.
WSDL 1.1 non è stato approvato dal World Wide Web Consortium (W3C), tuttavia ha appena rilasciato una bozza per la versione 2.0 che sarà una raccomandazione (uno standard ufficiale), e quindi approvata dal W3C.
WSDL ─ Punti da notare
WSDL è un protocollo basato su XML per lo scambio di informazioni in un ambiente decentralizzato e distribuito. Alcune delle altre funzionalità di WSDL sono le seguenti:
Le definizioni WSDL descrivono come accedere a un servizio Web e quali operazioni eseguirà.
È un linguaggio per descrivere come interfacciarsi con servizi basati su XML.
È parte integrante di UDDI (Universal Description, Discovery, and Integration), un registro aziendale mondiale basato su XML.
WSDL è la lingua utilizzata da UDDI.
Utilizzo WSDL
WSDL viene spesso utilizzato in combinazione con SOAP e XML Schema per fornire servizi Web su Internet. Un programma client che si connette a un servizio Web può leggere il WSDL per determinare quali funzioni sono disponibili sul server. Tutti i tipi di dati speciali utilizzati sono incorporati nel file WSDL sotto forma di XML Schema. Il client può quindi utilizzare SOAP per chiamare effettivamente una delle funzioni elencate nel WSDL.
Capire WSDL
WSDL suddivide i servizi web in tre elementi specifici e identificabili che possono essere combinati o riutilizzati una volta definiti.
I tre elementi principali di WSDL che possono essere definiti separatamente sono:
- Types
- Operations
- Binding
Un documento WSDL ha vari elementi, ma sono contenuti all'interno di questi tre elementi principali, che possono essere sviluppati come documenti separati e quindi possono essere combinati o riutilizzati per formare file WSDL completi.
In questo tutorial, stiamo seguendo CurrencyConverter WSDL: http://www.webservicex.net
Formato ed elementi
CurrencyConverter WSDL avrà il seguente aspetto:
WSDL ─ Tipo di porta
L'elemento <portType> combina più elementi di messaggio per formare un'operazione completa di sola andata o andata e ritorno. Ad esempio, un <portType> può combinare una richiesta e un messaggio di risposta in un'unica operazione di richiesta / risposta. Questo è più comunemente usato nei servizi SOAP. Un portType può definire più operazioni.
Esempio
- L'elemento portType definisce una singola operazione, denominata ConversionRate.
- L'operazione è costituita da un singolo messaggio di input ConversionRateHttpPostIn.
- L'operazione per il messaggio di output è ConversionRateHttpPostOut.
Modelli di funzionamento
WSDL supporta quattro modelli di funzionamento di base:
Senso Unico
Il servizio riceve un messaggio. L'operazione ha quindi un unico elemento di input. La grammatica per l'operazione unidirezionale è:
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:input name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Richiesta ─ Risposta
Il servizio riceve un messaggio e invia una risposta. L'operazione ha quindi un elemento di input, seguito da un elemento di output. Per incapsulare gli errori, è anche possibile specificare un elemento fault opzionale. La grammatica per un'operazione di richiesta-risposta è:
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Sollecitare ─ Risposta
Il servizio invia un messaggio e riceve una risposta. L'operazione ha quindi un elemento di output, seguito da un elemento di input. Per incapsulare gli errori, è anche possibile specificare un elemento fault opzionale. La grammatica per un'operazione di sollecitazione-risposta è:
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Notifiche
Il servizio invia un messaggio. L'operazione ha quindi un unico elemento di output. Di seguito è riportata la grammatica per un'operazione di notifica:
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:output name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
WSDL ─ Binding e servizio
Il <binding>element fornisce dettagli specifici su come un'operazione portType verrà effettivamente trasmessa in rete.
Le associazioni possono essere rese disponibili tramite più trasporti tra cui HTTP GET, HTTP POST o SOAP.
I collegamenti forniscono informazioni concrete su quale protocollo viene utilizzato per trasferire le operazioni portType.
Le associazioni forniscono informazioni su dove si trova il servizio.
Per il protocollo SOAP, l'associazione è <soap: binding> e il trasporto è costituito dai messaggi SOAP sopra il protocollo HTTP.
È possibile specificare più associazioni per un singolo portType.
Servizio
Il <service>elemento definisce le porte supportate dal servizio web. Per ciascuno dei protocolli supportati, è presente un elemento porta. L'elemento di servizio è una raccolta di porte.
I client del servizio Web possono apprendere quanto segue dall'elemento del servizio:
- Dove accedere al servizio,
- Attraverso quale porta accedere al servizio web e
- Come vengono definiti i messaggi di comunicazione.
L'elemento di servizio include un elemento di documentazione per fornire documentazione leggibile dall'uomo.
<wsdl:service name = "CurrencyConvertor">
<wsdl:port name = "CurrencyConvertorSoap" binding = "tns:CurrencyConvertorSoap">
<soap:address location = "http://www.webservicex.net/CurrencyConvertor.asmx" />
</wsdl:port>
<wsdl:port name = "CurrencyConvertorSoap12"binding = "tns:CurrencyConvertorSoap12>
<soap12:address location = "http://www.webservicex.net/CurrencyConvertor.asmx" />
</wsdl:port>
<wsdl:port name = "CurrencyConvertorHttpGet" binding = "tns:CurrencyConvertorHttpGet">
<http:address location = "http://www.webservicex.net/CurrencyConvertor.asmx" />
</wsdl:port>
<wsdl:portname = "CurrencyConvertorHttpPost"binding = "tns:CurrencyConvertorHttpPost">
<http:address location = "http://www.webservicex.net/CurrencyConvertor.asmx" />
</wsdl:port>
</wsdl:service>