Cibernetia > Manuales > Servicios web > WSDL
Búsqueda personalizada







WSDL

WSDL son las siglas en inglés de "Lenguaje de Descripción de Servicios Web" (o "Web Services Description Language"), un lenguaje que está basado en XML y que permite la descripción de los servicios web desplegados. WSDL se utiliza también para la localización y ubicación de estos servicios en Internet.

Un documento WSDL no es más que un documento XML que describe ciertas características propias de un servicio web, así como su localización y aquellos parámetros y métodos que soporta.

Un documento WSDL define un servicio web utilizando a tal fin elementos XML, como:

  • <portType> para las operaciones que proporciona el servicio web
  • <message> para los mensajes que utiliza por el servicio web
  • <types> para los tipos de datos que utiliza el servicio web
  • <binding> para los protocolos de comunicaciones que utiliza el servicio web

Un documento WSDL tiene una estructura semejante a la siguiente:

<definitions>
<types>
los tipos de datos...
</types>
<message>
las definiciones del mensaje...
</message>
<portType>
las definiciones de operación ...
</portType>
<binding>
las definiciones de protocolo...
</binding>
</definitions>

Los puertos de WSDL

<portType> es el elemento XML de WSDL que define el servicio web, así como las operaciones posibles mediante dicho servicio y los mensajes vinculados. <portType> cumple una función análoga a la de una función de biblioteca en programación clásica o a la de una clase en programación orientada a objetos.

Los mensajes WSDL

El elemento message define los datos que participan en una operación. Cada mensaje puede tener una o varias partes, y cada parte puede considerarse como si fuera los parámetros que se pasan en la llamada a una función en programación clásica o un método en programación orientada a objetos.

Los tipos de datos en WSDL

Mediante el elemento <types> se definen los tipos de datos utilizados en el servicio web. Para ello, WSDL utiliza XML Schema.

Los vínculos en WSDL

<binding> define el formato del mensaje y el protocolo para cada uno de los puerto.

Ejemplo de un documento WSDL:

<message name="obtTerminoDePet">
<part name="param" type="xs:string"/>
</message>
<message name="obtTerminoDeResp">
<part name="valor" type="xs:string"/>
</message>
<portType name="terminosDeDiccionario">
<operation name="obtTermino">
<input message="obtTerminoDePet"/>
<output message="optTerminoDeResp"/>
</operation>
</portType>

Vemos como el portType define terminosDeDiccionario como el nombre de un puerto y define obtTermino como el nombre de una operación. Esta operación tiene un mensaje de entrada (es decir, un parámetro) denominado obtTerminoDePet y un mensaje de salida (esto es, un resultado) denominado obtTerminoDeResp. Los elementos message definen los tipos de datos que están asociados a los mensajes.

terminosDeDiccionario equivale en programación clásica a una librería de funciones; obtTermino equivale a una función, y obtTerminoDePet y obtTerminoDeResp equivalen respectivamente a los parámetros de entrada y salida.

Puertos

Un puerto define el punto de conexión a un servicio web. Es posible definirlo como una librería de funciones (en programación clásica) o una clase (en programación orientada a objetos). Puede compararse cada operación que esté definida para un puerto a una función en cualquier lenguaje de programación clásico.

Tipos de operación

Existen varios tipos de operación en WSDL. El tipo más frecuente es el denominado "de petición-respuesta". Disponemos, además, de:

  • Unidireccional: la operación recibe mensajes, sin retornar respuestas.
  • Petición-respuesta: la operación recibe una petición y devuelve una respuesta.
  • Solicitud-respuesta: la operación puede enviar una petición y permanecerá a la espera de una respuesta.
  • Notificación: la operación puede enviar un mensaje sin esperar respuesta.

Un ejemplo de operación de tipo unidireccional:

<message name="valorNuevo">
<part name="termino" type="xs:string"/>
<part name="valor" type="xs:string"/>
</message>
<portType name="terminosDeDiccionario">
<operation name="terminoNuevo">
<input name="terminoNuevo" message="valorNuevo"/>
</operation>
</portType>

En el ejemplo se define una operación unidireccional llamada terminoNuevo, que permite introducir nuevos términos en el diccionario. Utiliza un mensaje de entrada llamado valorNuevo, que maneja los parámetros "termino" y "valor". Sin embargo, no se ha definido salida alguna para la operación.

Un ejemplo de operación de tipo petición-respuesta:

<message name="obtTerminoDePet">
<part name="param" type="xs:string"/>
</message>
<message name="obtTerminoDeResp">
<part name="valor" type="xs:string"/>
</message>
<portType name="terminosDeDiccionario">
<operation name="obtTermino">
<input message="obtTerminoDePet"/>
<output message="optTerminoDeResp"/>
</operation>
</portType>

En el ejemplo se definen 2 mensajes, de entrada y de salida, para la operación obtTermino.

Enlaces

Los enlaces o vínculos de WSDL (también denominados "bindings") permiten la definición de los formatos de mensaje y de protocolo para los servicios web. Un ejemplo posible de enlace para una operación de tipo petición-respuesta para SOAP sería:

<message name="obtTerminoDePet">
<part name="param" type="xs:string"/>
</message>
<message name="obtTerminoDeResp">
<part name="valor" type="xs:string"/>
</message>
<portType name="terminosDeDiccionario">
<operation name="obtTermino">
<input message="obtTerminoDePet"/>
<output message="optTerminoDeResp"/>
</operation>
</portType>
<binding type="terminosDeDiccionario" name="tD">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation soapAction="http://uoc.edu/obtTermino"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

El elemento <binding> cuenta con 2 atributos: "name" y "type". Con "name" (se puede utilizar cualquier nombre, sin que coincida necesariamente con el utilizado en la definición de port) se define el nombre del vínculo, y el atributo "type" apunta al puerto del vínculo, que es, en este caso, terminosDeDiccionario. El elemento soap:binding cuenta con 2 atributos: "style" y "transport". "style" puede ser "rpc" o "document". En el ejemplo se ha utilizado "document". "transport" define qué protocolo SOAP se debe utilizar; en el ejemplo, HTTP.

"operation" define las operaciones que proporciona el puerto. Para cada se debe especificar la acción SOAP que corresponda. También se debe especificar el método para codificar la entrada (o "input") y la salida (u "output"). En el ejemplo, la codificación es "literal".

Los manuales titulados Introducción a las aplicaciones web, Instalación del servidor web y Servicios web han sido extraídos, con algunas modificaciones, del manual "Desarrollo de aplicaciones web", publicado por la UOC dentro de su máster de software libre, escrito por Carles Mateu i Piñol.

El manual tiene licencia GFDL, la cual otorga permiso para copiar, distribuir y modificar el documento según los términos de la GNU Free Documentation License, Version 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera.

Se puede acceder al documento original en: http://www.uoc.edu/masters/esp/img/873.pdf (versión imprimible) y http://www.uoc.edu/masters/esp/img/692.zip (versión editable, formato zip).

Manuales | Tesis: Ordenadores, Circuitos integrados...
english
Cibernetia