XML WSDL
- WSDL sta per Web Services Description Language
- WSDL viene utilizzato per descrivere i servizi Web
- WSDL è scritto in XML
- WSDL è una raccomandazione del W3C del 26 giugno 2007
Documenti WSDL
Un documento WSDL descrive un servizio Web. Specifica l'ubicazione del servizio e i metodi del servizio, utilizzando questi elementi principali:
Element | Description |
---|---|
<types> | Defines the (XML Schema) data types used by the web service |
<message> | Defines the data elements for each operation |
<portType> | Describes the operations that can be performed and the messages involved. |
<binding> | Defines the protocol and data format for each port type |
La struttura principale di un documento WSDL è simile a questa:
<definitions>
<types>
data type definitions........
</types>
<message>
definition of the data being communicated....
</message>
<portType>
set of operations......
</portType>
<binding>
protocol and data format specification....
</binding>
</definitions>
Esempio WSDL
Questa è una frazione semplificata di un documento WSDL:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
In questo esempio l' elemento <portType> definisce "glossaryTerms" come il nome di una porta e "getTerm" come il nome di un'operazione .
L'operazione "getTerm" ha un messaggio di input chiamato "getTermRequest" e un messaggio di output chiamato "getTermResponse".
Gli elementi <messaggio> definiscono le parti di ogni messaggio e i tipi di dati associati.
L'elemento <portType>
L'elemento <portType> definisce un servizio Web , le operazioni che possono essere eseguite e i messaggi coinvolti.
Il tipo di richiesta-risposta è il tipo di operazione più comune, ma WSDL ne definisce quattro tipi:
Type | Definition |
---|---|
One-way | The operation can receive a message but will not return a response |
Request-response | The operation can receive a request and will return a response |
Solicit-response | The operation can send a request and will wait for a response |
Notification | The operation can send a message but will not wait for a response |
Operazione unidirezionale WSDL
Un esempio di operazione unidirezionale:
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm" message="newTermValues"/>
</operation>
</portType >
Nell'esempio precedente, portType "glossaryTerms" definisce un'operazione unidirezionale denominata "setTerm".
L'operazione "setTerm" consente di inserire nuovi messaggi di termini del glossario utilizzando un messaggio "newTermValues" con i parametri di input "term" e "value". Tuttavia, non viene definito alcun output per l'operazione.
Operazione richiesta-risposta WSDL
Un esempio di operazione richiesta-risposta:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
Nell'esempio precedente, portType "glossaryTerms" definisce un'operazione di richiesta-risposta denominata "getTerm".
L'operazione "getTerm" richiede un messaggio di input chiamato "getTermRequest" con un parametro chiamato "term" e restituirà un messaggio di output chiamato "getTermResponse" con un parametro chiamato "value".
WSDL Associazione a SOAP
Le associazioni WSDL definiscono il formato del messaggio e i dettagli del protocollo per un servizio Web.
Un esempio di operazione richiesta-risposta:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapAction="http://example.com/getTerm"/>
<input><soap:body use="literal"/></input>
<output><soap:body use="literal"/></output>
</operation>
</binding>
L' elemento di associazione ha due attributi: nome e tipo.
L'attributo name (puoi usare qualsiasi nome tu voglia) definisce il nome dell'associazione e l'attributo type punta alla porta per l'associazione, in questo caso la porta "glossaryTerms".
L' elemento soap:binding ha due attributi: stile e trasporto.
L'attributo style può essere "rpc" o "document". In questo caso utilizziamo document. L'attributo transport definisce il protocollo SOAP da utilizzare. In questo caso utilizziamo HTTP.
L' elemento operation definisce ogni operazione esposta da portType.
Per ogni operazione deve essere definita l'azione SOAP corrispondente. È inoltre necessario specificare come vengono codificati l'input e l'output. In questo caso usiamo "letterale".