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