WSDL (I) – Introducción.

WSDL es el acrónimo de Web Services Description Language (en castellano Lenguaje para la Definición de Servicios Web) y es una especificación estándar que, basada en XML, sirve para definir todos los elementos que conforman un servicio web. Estos elementos descritos desde el WSDL pueden ser:

  • Información del interface describiendo todas las funciones disponibles.
  • Información de los tipos de datos que se utilizan en los mensajes de petición y de respuesta de las funciones.
  • Información del tipo de binding utilizado sobre el protocolo que usado en la comunicación con el servicio.
  • Información de la ubicación del servicio y la url desde la que se puede acceder a esta información.

Se podría resumir que WSDL proporciona el contrato de un servicio entre la entidad que lo solicita y la que lo proporciona, de forma que usando el WSDL, un cliente puede localizar un servicio web e invocar cualquiera de sus funciones de forma correcta.

El WSDL se divide principalmente en los siguiente grupos de elementos:

wsdl:definitions
  import
  wsdl:types
    xsd:schema
  wsdl:message
    part
  wsdl:portType
    wsdl:operation
      wsdl:input
      wsdl:output
      wsdl:fault
  wsdl:binding
    wsdl:operation
      wsdl:input
      wsdl:output
      wsdl:fault
   wsdl:service 
     wsdl:port

wsdl:definitions.

El elemento definitions es el elemento raíz de todo WSDL y en él se incluye toda la información necesaria para describir el servicio web; las operaciones que publica el servicio web, los tipos de datos que se utilizan en las operaciones, los tipos de binding dependiendo del protocolo que se utiliza en la llamada al servicio web y la url en la que es publicado y a la que se debe llamar para invocarlo. 

wsdl:types.

El elemento wsdl:types define directamente los tipos de datos que se utilizan en las operaciones del servicio web. Esta definición de tipos se realiza mediante Esquemas XML (XSD) que validan el formato de los mensajes en la comunicación. 

wsdl:messages

El elemento wsdl:messages define los mensaje abstractos que sirven de entrada y salida de las operaciones. Estos mensajes están formados por una o más parts. Estas parts están asociada con un elemento o un tipo de dato de los definidos en wsdl:types.

wsdl:portType (wsdl:interfaces)

El elemento wsdl:portType define un grupo de operaciones a incluir en el servicio web. Este elemento también es conocido como interface, de hecho en la nueva especificación WSDL 1.2 (que en el momento de escribir este artículo se encuentra en estado “draft”) se sustituye el termino “portType” por el de “interface”.  

Cada portType debe tener un nombre único para referirse a él desde cualquier parte en el WSDL. El portType puede contener una o más operaciones. Cada operación contiene una combinación de elementos de entrada y salida. También puede definirse un elemento fault para manejar los errores. El orden de estos elementos es importante porque define el patrón de intercambio de mensajes utilizado. 

  • Patrón One-way. El endpoint recibe un mensaje. Se define solamente un elemento de entrada.
  • Patrón Request-response. El endpoint recibe un mensaje y envía la correspondiente respuesta. Se define un elemento de entrada seguido de uno de salida. 
  • Patrón Solicit-Response. El endpoint envía un mensaje y recibe la respuesta correspondiente. Se define un elemento de salida y seguido uno de entrada. 
  • Patrón Notification. El endpoint envia un mensaje. Se define un elemento de salida. 

wsdl:binding

El elemento wsdl:binding define el formato del mensaje y los detalles del protocolo que se utiliza en la comunicación con el servicio web, de hecho, puede haber diferentes bindings asociados al mismo portType, por lo que un mismo servicio web puede implementar la comunicación a través de diferentes protocolos. 

En los elementos wsdl:binding sólo se puede especificar un único protocolo; SOAP, GET/POST o MIME

En los elementos wsdl:binding no se puede aportar ninguna información sobre la dirección de publicación del servicio web ya que esta información se proporciona en el elemento wsdl:port del elemento wsdl:service.

wsdl:service y wsdl:port

El elemento wsdl:service contiene los wsdl:port que se publican en el servicio web.  

El elemento wsdl:port define un endpoint individual especificando para cada binding definido en wsdl:binding una dirección única de acceso. 

Por tanto, el elemento wsdl:service proporciona la información necesaria para poder acceder a las diferentes funcionalidades proporcionadas por el servicio web.