WSDL - Guida rapida
WSDL è l'acronimo di Web Services Description Language. È il formato standard per descrivere un servizio web. WSDL è stato sviluppato congiuntamente da Microsoft e IBM.
Caratteristiche di WSDL
WSDL è un protocollo basato su XML per lo scambio di informazioni in ambienti decentralizzati e distribuiti.
Le definizioni WSDL descrivono come accedere a un servizio Web e quali operazioni eseguirà.
WSDL è un linguaggio per descrivere come interfacciarsi con servizi basati su XML.
WSDL è parte integrante di UDDI (Universal Description, Discovery, and Integration), un registro aziendale mondiale basato su XML.
WSDL è la lingua utilizzata da UDDI.
WSDL è pronunciato come "wiz-dull" e definito come "WSD-L".
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.
Storia di WSDL
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 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.
Elementi WSDL
Un documento WSDL contiene i seguenti elementi:
Definition- È l'elemento radice di tutti i documenti WSDL. Definisce il nome del servizio Web, dichiara più spazi dei nomi utilizzati nel resto del documento e contiene tutti gli elementi del servizio descritti qui.
Data types - I tipi di dati da utilizzare nei messaggi sono sotto forma di schemi XML.
Message - È una definizione astratta dei dati, sotto forma di un messaggio presentato come un intero documento o come argomenti da mappare a una chiamata di metodo.
Operation - È la definizione astratta dell'operazione per un messaggio, come la denominazione di un metodo, una coda di messaggi o un processo aziendale, che accetterà ed elaborerà il messaggio.
Port type- È un insieme astratto di operazioni mappate su uno o più punti finali, che definiscono la raccolta di operazioni per un'associazione; la raccolta di operazioni, poiché è astratta, può essere mappata a più trasporti attraverso vari binding.
Binding - È il protocollo concreto e i formati di dati per le operazioni e i messaggi definiti per un particolare tipo di porta.
Port - È una combinazione di un indirizzo di associazione e di rete, che fornisce l'indirizzo di destinazione della comunicazione del servizio.
Service- Si tratta di una raccolta di endpoint correlati che comprendono le definizioni di servizio nel file; i servizi mappano l'associazione alla porta e includono eventuali definizioni di estensibilità.
Oltre a questi elementi principali, la specifica WSDL definisce anche i seguenti elementi di utilità:
Documentation - Questo elemento viene utilizzato per fornire documentazione leggibile dall'utente e può essere incluso in qualsiasi altro elemento WSDL.
Import - Questo elemento viene utilizzato per importare altri documenti WSDL o schemi XML.
NOTE - Le parti WSDL vengono generalmente generate automaticamente utilizzando strumenti che riconoscono i servizi Web.
La struttura del documento WSDL
La struttura principale di un documento WSDL è simile a questa:
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
<operation>
definition of a operation.......
</operation>
</portType>
<binding>
definition of a binding....
</binding>
<service>
definition of a service....
</service>
</definitions>
Un documento WSDL può contenere anche altri elementi, come elementi di estensione e un elemento di servizio che rende possibile raggruppare le definizioni di diversi servizi Web in un unico documento WSDL.
Procedi ulteriormente per analizzare un esempio di documento WSDL.
Di seguito è riportato un file WSDL fornito per dimostrare un semplice programma WSDL.
Supponiamo che il servizio fornisca una singola funzione disponibile pubblicamente, chiamata sayHello . Questa funzione prevede un singolo parametro di stringa e restituisce un singolo saluto di stringa. Ad esempio, se si passa il parametro world , la funzione di servizio sayHello restituisce il saluto "Hello, world!".
Esempio
Contenuto del file HelloService.wsdl -
<definitions name = "HelloService"
targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/" />
</port>
</service>
</definitions>
Analisi di esempio
Definitions - HelloService
Type - Utilizzo di tipi di dati incorporati e sono definiti in XMLSchema.
Message -
sayHelloRequest - parametro firstName
sayHelloresponse - valore di ritorno del saluto
Port Type - operazione sayHello che consiste in una richiesta e un servizio di risposta.
Binding - Direzione per utilizzare il protocollo di trasporto HTTP SOAP.
Service - Servizio disponibile su http://www.examples.com/SayHello/
Port - Associa l'associazione all'URI http://www.examples.com/SayHello/ da cui è possibile accedere al servizio in esecuzione.
Il <definitions>elemento deve essere l'elemento radice di tutti i documenti WSDL. Definisce il nome del servizio web.
Ecco il pezzo di codice dell'ultimo capitolo che utilizza l' elemento definizioni .
<definitions name="HelloService"
targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
................................................
</definitions>
Dall'esempio sopra, possiamo concludere che le definizioni :
è un contenitore di tutti gli altri elementi.
specifica che questo documento si chiama HelloService .
specifica un attributo targetNamespace . Il targetNamespace è una convenzione di schema XML che consente il documento WSDL per riferirsi a se stesso. In questo esempio, abbiamo specificato un targetNamespace di http://www.examples.com/wsdl/HelloService.wsdl
specifica uno spazio dei nomi predefinito: xmlns = http: //schemas.xmlsoap.org/wsdl/. Si presume quindi che tutti gli elementi senza un prefisso dello spazio dei nomi, come message o portType , facciano parte dello spazio dei nomi WSDL predefinito.
specifica numerosi spazi dei nomi che vengono utilizzati nel resto del documento.
NOTE- La specifica dello spazio dei nomi non richiede che il documento sia presente nella posizione specificata. Il punto importante è che specifichi un valore univoco, diverso da tutti gli altri spazi dei nomi definiti.
Un servizio web deve definire i suoi input e output e come sono mappati dentro e fuori dai servizi. WSDL<types>element si occupa di definire i tipi di dati utilizzati dal servizio web. I tipi sono documenti XML o parti di documenti.
L' elemento types descrive tutti i tipi di dati utilizzati tra il client e il server.
WSDL non è legato esclusivamente a un sistema di digitazione specifico.
WSDL utilizza la specifica W3C XML Schema come scelta predefinita per definire i tipi di dati.
Se il servizio utilizza solo tipi semplici incorporati di XML Schema, come stringhe e numeri interi, l' elemento types non è richiesto.
WSDL consente di definire i tipi in elementi separati in modo che i tipi siano riutilizzabili con più servizi Web.
Ecco un pezzo di codice tratto dalla specifica W3C. Questo codice descrive come un elemento di tipi può essere utilizzato all'interno di un WSDL.
<types>
<schema targetNamespace = "http://example.com/stockquote.xsd"
xmlns = "http://www.w3.org/2000/10/XMLSchema">
<element name = "TradePriceRequest">
<complexType>
<all>
<element name = "tickerSymbol" type = "string"/>
</all>
</complexType>
</element>
<element name = "TradePrice">
<complexType>
<all>
<element name = "price" type = "float"/>
</all>
</complexType>
</element>
</schema>
</types>
I tipi di dati risolvono il problema di identificare i tipi di dati e i formati che intendi utilizzare con i tuoi servizi web. Le informazioni sul tipo vengono condivise tra il mittente e il destinatario. I destinatari dei messaggi hanno quindi bisogno di accedere alle informazioni che hai usato per codificare i tuoi dati e devono capire come decodificare i dati.
Il <message> l'elemento descrive i dati scambiati tra i fornitori di servizi web e i consumatori.
Ogni servizio Web ha due messaggi: input e output.
L'input descrive i parametri per il servizio web e l'output descrive i dati di ritorno dal servizio web.
Ogni messaggio contiene zero o più <part> parametri, uno per ogni parametro della funzione del servizio web.
Ogni <part> il parametro si associa a un tipo di calcestruzzo definito in <types> elemento contenitore.
Prendiamo un pezzo di codice dal capitolo WSDL Example -
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
Qui vengono definiti due elementi del messaggio. Il primo rappresenta un messaggio di richiesta SayHelloRequest e il secondo rappresenta un messaggio di risposta SayHelloResponse .
Ciascuno di questi messaggi contiene un singolo elemento della parte. Per la richiesta, la parte specifica i parametri della funzione; in questo caso, specifichiamo un unico parametro firstName . Per la risposta, la parte specifica i valori di ritorno della funzione; in questo caso, specifichiamo un singolo valore di ritorno del saluto.
Il <portType> element combina più elementi del messaggio per formare un'operazione completa di sola andata o andata e ritorno.
Ad esempio, a <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.
Prendiamo un pezzo di codice dal capitolo WSDL Example -
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
L'elemento portType definisce una singola operazione, chiamata sayHello .
L'operazione consiste in un singolo messaggio di input SayHelloRequest e un file
messaggio di output SayHelloResponse .
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 un'operazione a senso unico è:
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:input name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Richiedere 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>
Notifica
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>
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 da messaggi SOAP in cima al protocollo HTTP.
È possibile specificare più associazioni per un singolo portType .
L'elemento binding ha due attributi: nome e tipo di attributo.
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
L' attributo name definisce il nome dell'associazione e l'attributo type punta alla porta per l'associazione, in questo caso la porta "tns: Hello_PortType".
Rilegatura SOAP
WSDL 1.1 include estensioni integrate per SOAP 1.1. Consente di specificare dettagli specifici SOAP tra cui intestazioni SOAP, stili di codifica SOAP e intestazione HTTP SOAPAction. Gli elementi di estensione SOAP includono quanto segue:
- soap:binding
- soap:operation
- soap:body
sapone: legante
Questo elemento indica che l'associazione sarà resa disponibile tramite SOAP. L' attributo style indica lo stile generale del formato del messaggio SOAP. Un valore di stile di rpc specifica un formato RPC.
L' attributo di trasporto indica il trasporto dei messaggi SOAP. Il valore http://schemas.xmlsoap.org/soap/http indica il trasporto SOAP HTTP, mentre http://schemas.xmlsoap.org/soap/smtp indica il trasporto SOAP SMTP.
sapone: operazione
Questo elemento indica l'associazione di un'operazione specifica a un'implementazione SOAP specifica. L' attributo soapAction specifica che l'intestazione HTTP SOAPAction deve essere utilizzata per identificare il servizio.
sapone: corpo
Questo elemento consente di specificare i dettagli dei messaggi di input e output. Nel caso di HelloWorld, l'elemento body specifica lo stile di codifica SOAP e l'URN dello spazio dei nomi associato al servizio specificato.
Ecco il pezzo di codice dal capitolo Esempio:
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
UN <port> L'elemento definisce un singolo endpoint specificando un singolo indirizzo per un'associazione.
Ecco la grammatica per specificare una porta -
<wsdl:definitions .... >
<wsdl:service .... > *
<wsdl:port name = "nmtoken" binding = "qname"> *
<-- extensibility element (1) -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
L'elemento port ha due attributi: name e binding .
L' attributo name fornisce un nome univoco tra tutte le porte definite nel documento WSDL allegato.
L'attributo binding si riferisce al binding utilizzando le regole di collegamento definite da WSDL.
Gli elementi di estendibilità del binding vengono utilizzati per specificare le informazioni sull'indirizzo per la porta.
Una porta NON DEVE specificare più di un indirizzo.
Una porta NON DEVE specificare informazioni di binding diverse dalle informazioni sull'indirizzo.
Ecco un pezzo di codice dal capitolo Esempio:
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
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.
Ecco un pezzo di codice dal capitolo Esempio:
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
Gli attributi di binding dell'elemento port associano l'indirizzo del servizio a un elemento di binding definito nel servizio web. In questo esempio, questo è Hello_Binding
<binding name =" Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
Abbiamo trattato le basi di WSDL in questo tutorial. Il passaggio successivo consiste nell'apprendere SOAP, UDDI e Web Services.
Servizi web
I servizi Web sono applicazioni Web a standard aperto (XML, SOAP, HTTP, ecc.) Che interagiscono con altre applicazioni Web allo scopo di scambiare dati.
Per ulteriori informazioni sui servizi Web, visitare il tutorial sui servizi Web.
UDDI
UDDI è uno standard basato su XML per la descrizione, la pubblicazione e la ricerca di servizi Web.
Per saperne di più su UDDI, visita il Tutorial UDDI.
SAPONE
SOAP è un semplice protocollo basato su XML che consente alle applicazioni di scambiare informazioni su HTTP.
Per ulteriori informazioni su SOAP, visita il tutorial SOAP.
Se sei interessato a elencare la tua azienda, sito web o libri come risorsa WSDL, contatta a [email protected]
Elenco delle specifiche WSDL
Specification | Draft / Proposal | W3C Recommendation |
Nota WSDL 1.1 | 15. marzo 2001 |
|
Scenari di utilizzo di WSDL | 04 giugno 2002 |
|
Requisiti WSDL | 28. ottobre 2002 |
|
Architettura WSDL | 11. febbraio 2004 |
|
Glossario WSDL | 11. febbraio 2004 |
|
Scenari di utilizzo di WSDL | 11. febbraio 2004 |
|
Linguaggio principale WSDL 1.2 | 11. giugno 2003 |
|
Pattern dei messaggi WSDL 1.2 | 11. giugno 2003 |
|
Associazioni WSDL 1.2 | 11. giugno 2003 |
|
Primer WSDL 2.0 | 27. marzo 2006 |
|
Linguaggio principale WSDL 2.0 | 27. marzo 2006 |
|
Aggiunte WSDL 2.0 | 27. marzo 2006 |
|
Binding WSDL 2.0 SOAP 1.1 | 27. marzo 2006 |
|
Mappatura RDF WSDL 2.0 | 18. maggio 2006 |
|
WS Addressing Core | 09. maggio 2006 |
|
Binding SOAP di indirizzamento WS | 09. maggio 2006 |
|
Architettura web | 15. dicembre 2004 |