Google

martes, diciembre 12, 2006

Artículo Tecnológico: "WSDL: El contrato de un Servicio"

Ahí va una pequeña historia.

"Pablo es un desarrollador que está realizando un portal corporativo para una empresa farmacéutica. Una de las funcionalidades del portal es incluir un buscador de internet. Como Pablo es muy listo, sabe que el mejor buscador que existe es Google, y por tanto decide navegar por la web para ver si encuentra alguna información sobre el algoritmo de búsqueda que utiliza este famoso buscador.

Después de interminables horas de búsqueda, descubre que Google ofrece su buscador en forma de Servicio Web. En ese momento Pablo piensa... ¿Por qué construir algo que ya existe, es bueno, y puedo utlizarlo aunque mi portal esté desarrollado en Java?

Por lo tanto Pablo decide utilizar el Servicio Web de Google. Pero ¿Cómo utilizarlo? ¿Qué datos debe enviar? ¿Qué datos va a recibir? ¿Cuales son las funcionalidades que ofrece el Servicio de Google?

Toda esta información que necesita Pablo debería estar en algún lugar, ya que es imprescindible para acceder al Servicio."

Desde el punto de vista de los negocios, todas las respuestas a las preguntas de Pablo definen el contrato entre el cliente (el que usa el Servicio) y el proveedor (quien lo implementa), ya que indica las pautas a seguir por cada una de las partes.

Pues bien, WSDL (Web Service Description Language) es el lenguaje estándar definido por el W3C para describir un Servicio Web y crear ese contrato. No es un documento obligatorio, pero es muy importante que sea estándar ya que así se podrá acceder de manera dinámica a los Servicios.

Es muy importante entender WSDL porque es la parte fundamental para desarrollar Servicios. No es necesario saber construir un documento WSDL (ya que lo construyen automáticamente las herramientas de desarrollo), pero sí entenderlo. Este es el objetivo de este artículo.

La versión actual de WSDL es la 2.0, pero en este artículo se describirá la 1.1, ya que no todos los servidores soportan la última versión.

WSDL es un lenguaje basado en XML creado para definir el interfaz de los servicios. Un documento WSDL está divido en dos partes claramente diferenciadas:

  • Parte concreta: Es la parte que define el "como" y "donde".
  • Parte abstracta: Es la parte que define qué hace el servicio a través de los mensajes que envía y recibe.

El esquema simplificado de un documento WSDL es el siguiente:

A continuación se detalla brevemente cada una de las partes que componen un documento WSDL. En la parte abstracta tenemos:

  • types: Esta etiqueta define las estructuras de datos que se utilizarán para construir los mensajes de petición como de respuesta. Estas estructuras de datos pueden construirse con cualquier lenguaje, pero lo más normal es hacerlo con XML Schema. Este apartado es el más complicado sobre todo cuando tengamos que construir estructuras de datos muy complejas.
  • message: Describe los mensajes que se van a intercambiar entre el cliente y el Servicio Web. Un mensaje puede estar dividido en varias partes, por ejemplo, si en un mensaje queremos enviar datos y una imagen.
  • portType: Define el conjunto de operaciones que soporta el Servicio Web. Una operación no es más que un grupo de mensajes que serán intercambiados. Cada operación puede enviar o recibir al menos un mensaje cada vez.

En WSDL 1.1 existen 4 tipos de operaciones:

+ Unidireccional: El Servicio recibe un mensaje y no genera ninguna respuesta.

+ Petición / Respuesta: El Servicio recibe un mensaje y responde con otro.

+ Solicitud / Respuesta: El Servicio envía un mensaje y recibe una respuesta.

+ Notificación: El Servicio envía un mensaje, y no recibe respuesta.

Aunque WSDL 1.1 define los 4 tipos de operaciones, sólo soporta las 2 primeras.

En la parte concreta tenemos:

  • binding: Describe como formatear los mensajes para interactuar con un Servicio determinado. WSDL no define un estándar para formatear mensajes. Para ello utilizar la extensibilidad para definir como intercambiar los mensajes usando SOAP, HTTP, MIME, etc...
  • services: Este elemento indica donde se encuentra el Servicio usando la etiqueta . Cada etiqueta define el formato de los mensajes, y la dirección donde se encuentra el servicio que acepta mensajes en ese formato.

Como conclusión, el interfaz de un Servicio es el componente fundamental ya que define lo que ofrece el Servicio. Es muy importante dedicarle todo el tiempo necesario, ya que cualquier modificación provocará cambios en el resto de nuestras aplicaciones.