WSDL
WSDL , abbreviazione di Web Services Description Language , è un formato Extensible Markup Language ( XML ) utilizzato per descrivere i servizi Web (WS). La versione 1.0 è stata la prima raccomandazione del W3C e la versione 1.1 non ha mai raggiunto tale stato. La versione 2.0 è diventata l'attuale raccomandazione di tale entità.
WSDL descrive l'interfaccia pubblica per i servizi Web. Si basa su XML e descrive la forma di comunicazione, ovvero i requisiti del protocollo e i formati dei messaggi necessari per interagire con i servizi elencati nel suo catalogo. Le operazioni e i messaggi supportati sono descritti in astratto e quindi legati al protocollo di rete specifico e al formato del messaggio.
Pertanto WSDL viene spesso utilizzato in combinazione con SOAP e XML Schema . Un programma client che si connette a un servizio Web può leggere il WSDL per determinare quali funzioni sono disponibili sul server. Tipi di dati speciali sono inclusi nel file WSDL sotto forma di schema XML. Il client può utilizzare SOAP per effettuare la chiamata a una delle funzioni elencate nel WSDL.
Il WSDL ci permette di avere una descrizione di un servizio web. Specifica l'interfaccia astratta attraverso la quale un client può accedere al servizio e i dettagli su come dovrebbe essere utilizzato.
Struttura WSDL
La struttura WSDL ha i seguenti elementi:
Tipi di dati
- <tipi>: questa sezione definisce i tipi di dati utilizzati nei messaggi. Vengono utilizzati i tipi definiti nella specifica dello schema XML.
Messaggi
- <messaggio>: qui definiamo gli elementi del messaggio. Ogni messaggio può essere costituito da una serie di parti logiche. Le parti possono essere di qualsiasi tipo definito nella sezione precedente.
Tipi di porte
- <portType>: Con questa sezione definiamo le operazioni consentite ei messaggi scambiati nel Servizio.
Attacchi
- <binding>: specifichiamo i protocolli di comunicazione utilizzati.
Servizi
- <servizio>: insieme di porte e relativo indirizzo. Quest'ultima parte fa riferimento a quanto previsto dai paragrafi precedenti.
Con questi elementi non sappiamo cosa fa un servizio, ma abbiamo le informazioni necessarie per interagire con esso (funzioni, messaggi di input/output, protocolli...)
Esempi
Di seguito è riportato un esempio di un documento WSDL e delle sue diverse sezioni. In questo esempio specifico, viene implementato un servizio che mostra il suo valore di mercato attuale in base al nome di un valore di borsa.
<definitions name= "StockQuote"
targetNamespace= "http://example.com/stockquote.wsdl"
xmlns:tns= "http://example.com/stockquote.wsdl"
xmlns:xsd1= "http://example. com/stockquote.xsd"
xmlns:soap= "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns= "http://schemas.xmlsoap.org/wsdl/" >
<tipi>
<schema targetNamespace= "http://example.com/stockquote.xsd"
xmlns= "http://www.w3.org/2000/10/XMLSchema" >
<nome elemento = "TradePriceRequest" >
<complexType >
<all>
<element name= "tickerSymbol" type= "string" />
</all>
</complexType>
</element>
<element name= "TradePrice" >
<complexType>
<all>
<element name= "prezzo " type= "float" />
</all>
</complexType>
</element>
</schema>
</types>
< nome messaggio= "GetLastTradePriceInput" >
< nome parte= "body" element= "xsd1:TradePriceRequest" />
</message>
< nome messaggio= "GetLastTradePriceOutput" >
< nome parte= "body" element= "xsd1:TradePrice" />
</message>
<portType name= "StockQuotePortType" >
< nome operazione= "GetLastTradePrice" >
<input message= "tns:GetLastTradePriceInput" />
<output message= "tns:GetLastTradePriceOutput" />
</operation>
</portType>
<binding name= "StockQuoteSoapBinding" type= "tns:StockQuotePortType" >
<soap:binding style= "document" transport= "http://schemas.xmlsoap.org/soap/http" />
< nome operazione= "GetLastTradePrice" >
<soap:operazione soapAction= "http://example.com/GetLastTradePrice" />
<input>
<soap:body use= "literal" />
</input>
<output>
<soap:body use= "literal" />
</output>
</operazione>
</binding>
<service name= "StockQuoteService" >
<documentation> Il mio primo servizio </documentation>
<port name= "StockQuotePort" binding= "tns:StockQuoteSoapBinding" >
<soap:address location= "http://example.com/stockquote" />
</porta>
</servizio>
</definizioni>