XML WSDL
- WSDL significa Web Services Description Language
- WSDL é usado para descrever serviços da web
- WSDL é escrito em XML
- WSDL é uma recomendação do W3C de 26 de junho de 2007
Documentos WSDL
Um documento WSDL descreve um serviço da web. Ele especifica a localização do serviço e os métodos do serviço, usando estes elementos principais:
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 |
A estrutura principal de um documento WSDL é assim:
<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>
Exemplo de WSDL
Esta é uma fração simplificada de um 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>
Neste exemplo, o elemento <portType> define "glossaryTerms" como o nome de uma porta e "getTerm" como o nome de uma operação .
A operação "getTerm" tem uma mensagem de entrada chamada "getTermRequest" e uma mensagem de saída chamada "getTermResponse".
Os elementos <message> definem as partes de cada mensagem e os tipos de dados associados.
O elemento <portType>
O elemento <portType> define um serviço da web , as operações que podem ser executadas e as mensagens envolvidas.
O tipo de solicitação-resposta é o tipo de operação mais comum, mas o WSDL define quatro tipos:
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 |
Operação unidirecional WSDL
Um exemplo de operação unidirecional:
<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 >
No exemplo acima, o portType "glossaryTerms" define uma operação unidirecional chamada "setTerm".
A operação "setTerm" permite a entrada de novas mensagens de termos do glossário usando uma mensagem "newTermValues" com os parâmetros de entrada "term" e "value". No entanto, nenhuma saída é definida para a operação.
Operação de solicitação-resposta WSDL
Um exemplo de operação de solicitação-resposta:
<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>
No exemplo acima, o portType "glossaryTerms" define uma operação de solicitação-resposta chamada "getTerm".
A operação "getTerm" requer uma mensagem de entrada chamada "getTermRequest" com um parâmetro chamado "term", e retornará uma mensagem de saída chamada "getTermResponse" com um parâmetro chamado "value".
Ligação WSDL ao SOAP
As ligações WSDL definem o formato da mensagem e os detalhes do protocolo para um serviço da web.
Um exemplo de operação de solicitação-resposta:
<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>
O elemento de ligação tem dois atributos - nome e tipo.
O atributo name (você pode usar qualquer nome que desejar) define o nome da associação, e o atributo type aponta para a porta da associação, neste caso a porta "glossaryTerms".
O elemento soap:binding tem dois atributos - estilo e transporte.
O atributo style pode ser "rpc" ou "document". Neste caso usamos document. O atributo transport define o protocolo SOAP a ser usado. Neste caso usamos HTTP.
O elemento de operação define cada operação que o portType expõe.
Para cada operação, a ação SOAP correspondente deve ser definida. Você também deve especificar como a entrada e a saída são codificadas. Neste caso usamos "literal".