XML WSDL
- WSDL significa Lenguaje de descripción de servicios web
- WSDL se utiliza para describir servicios web
- WSDL está escrito en XML
- WSDL es una recomendación del W3C del 26 de junio de 2007
Documentos WSDL
Un documento WSDL describe un servicio web. Especifica la ubicación del servicio y los métodos del servicio, utilizando estos elementos principales:
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 estructura principal de un documento WSDL se ve así:
<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>
Ejemplo de WSDL
Esta es una fracción simplificada de 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>
En este ejemplo, el elemento <portType> define "glossaryTerms" como el nombre de un puerto y "getTerm" como el nombre de una operación .
La operación "getTerm" tiene un mensaje de entrada llamado "getTermRequest" y un mensaje de salida llamado "getTermResponse".
Los elementos <message> definen las partes de cada mensaje y los tipos de datos asociados.
El elemento <portType>
El elemento <portType> define un servicio web , las operaciones que se pueden realizar y los mensajes involucrados.
El tipo de solicitud-respuesta es el tipo de operación más común, pero WSDL define cuatro 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 |
Operación unidireccional WSDL
Un ejemplo de operación unidireccional:
<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 >
En el ejemplo anterior, portType "glossaryTerms" define una operación unidireccional denominada "setTerm".
La operación "setTerm" permite la entrada de nuevos mensajes de términos del glosario utilizando un mensaje "newTermValues" con los parámetros de entrada "término" y "valor". Sin embargo, no se define ninguna salida para la operación.
Operación de solicitud-respuesta de WSDL
Un ejemplo de operación de solicitud-respuesta:
<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>
En el ejemplo anterior, portType "glossaryTerms" define una operación de solicitud-respuesta llamada "getTerm".
La operación "getTerm" requiere un mensaje de entrada llamado "getTermRequest" con un parámetro llamado "term", y devolverá un mensaje de salida llamado "getTermResponse" con un parámetro llamado "value".
Enlace WSDL a SOAP
Los enlaces WSDL definen el formato del mensaje y los detalles del protocolo para un servicio web.
Un ejemplo de operación de solicitud-respuesta:
<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>
El elemento vinculante tiene dos atributos: nombre y tipo.
El atributo de nombre (puede usar cualquier nombre que desee) define el nombre del enlace y el atributo de tipo apunta al puerto para el enlace, en este caso el puerto "glossaryTerms".
El elemento soap:binding tiene dos atributos: estilo y transporte.
El atributo de estilo puede ser "rpc" o "document". En este caso usamos documento. El atributo de transporte define el protocolo SOAP a utilizar. En este caso usamos HTTP.
El elemento de operación define cada operación que expone portType.
Para cada operación se debe definir la acción SOAP correspondiente. También debe especificar cómo se codifican la entrada y la salida. En este caso usamos "literal".