Banner

Ultima revisión 28/01/2013

Diferencias entre Estilos WSDL: RPC y Document

Un servicio web, normalmente, está descrito por un documento WSDL (Web Services Description Language) como ya sabemos. En este documento, las operaciones del Servicio Web y los mensajes soportados se describen en abstracto y posteriormente se unen a un protocolo de red concreto y se asigna el formato del mensaje.

Como también sabemos o deberíamos saber, un documento WSDL típico se compone de los elementos: types, message, y portType para las definiciones abstractas, binding y service para la especificación concreta y, todos ellos, están envueltos dentro del elemento definitions.

Cuando hablamos de estilos de este documento debemos escoger entre RPC y document para asignar un valor a la propiedad styles del elemento binding. Este elemento es el que actúa como enlace WSDL y que describe cómo el servicio está enlazado a un protocolo de mensajería, ya sea HTTP GET / POST, MIME, o SOAP.

También deberemos escoger un valor para la propiedad use de entre encoded y literal.

El Atributo "style"

La WSDL 1.1 especifica el estilo de la unión, ya sea como RPC o document. Esta opción corresponde a la forma de la carga útil SOAP - es decir, cómo el contenido del elemento <soap:Body> - puede ser estructurado. A continuación se muestran algunos detalles de cómo cada estilo afecta el contenido de <soap:Body>:

Document

El contenido de <soap:Body> se especifica mediante esquemas XML definidos en la sección <wsdl:type>. No tiene por qué seguir las convenciones específicas de SOAP. En resumen, el mensaje SOAP se envía como un "documento" en el elemento <soap:Body> sin reglas de formato adicionales que tengan que ser consideradas. Esta es la opción por defecto.

ACLARACIÓN DE USO: Cuando usamos el estilo predefinido document, puede suceder que llamemos a una función de nuestro Servicio Web y, sin embargo, se ejecute otra. Por raro que parezca, si lo analizamos un poco no será de extrañar. Ocurre cuando tenemos 2 métodos que tienen el mismo número de parámetros tanto de entrada como de salida y, además, son del mismo tipo. Al no haber reglas, si el documento WSDL se encuentra con dos métodos que se llaman distinto pero toda la definición interna es exactamente igual, la segunda la tomará como un error y se hará internamente un 'alias' a la primera coincidencia.

RPC

La estructura de un elemento <soap:Body> estilo RPC debe cumplir con las normas que se especifican en detalle en la sección 7 de la especificación SOAP 1.1. De acuerdo con estas reglas, <soap:Body> puede contener sólo un elemento que lleva el nombre de la operación, y todos los parámetros deben estar representados como sub-elementos de este elemento contenedor.

Como consecuencia de la libertad de elección que ofrece el estilo del documento, los mensajes SOAP se conforman el estilo del documento WSDL pueden parecer exáctamente los mismos que el equivalente en RPC.

SOAP tiene sus raíces en las llamadas a procedimientos remotos sincronizados a través de HTTP y el aspecto del documento es la consecuencia de seguir estas convenciones. Más tarde, fue visto como una simplificación del XML arbitrario en el cuerpo SOAP sin adherirse a las convenciones. Esta perspectiva se ve reflejada en los documentos de estilo de los documentos WSDL. Hasta el momento, ambas opciones están representadas en la especificación WSDL y la elección de uno u otro es sobre todo una cuestión de gusto personal, ya que la mayoría de los clientes SOAP de hoy día aceptan ambas versiones.

El Atributo "use"

El atributo use especifica las reglas de codificación del mensaje SOAP. Esto también se realiza dentro del elemento <wsdl:binding>. El valor puede ser encoded o literal. Se refiere a las reglas de serialización que debe seguir tanto el cliente como el servidor SOAP para interpretar el contenido del elemento <Body> en la carga útil.

Literal

Significa que las definiciones de tipos siguen literalmente una definición de esquema XML.

Encoded

Se refiere a la representación de los datos de aplicación en XML, por lo general de acuerdo con las reglas de la especificación SOAP 1.1. Las reglas para codificar e interpretar el cuerpo SOAP se encuentran en una URL especificada por el atributo encodingStyle. Encoded es la opción adecuada cuando no se desean estructuras complejas, ya que todos tipos pueden ser perfectamente descritos a través del esquema XML.

La combinación de los atributos de estilo y uso produce cuatro posibles combinaciones:

  • RPC / encoded
  • RPC / literal
  • document / encoded
  • document / literal

Algunas de estas combinaciones se utilizan raramente en la práctica, tales como document / encoded. En general, el uso literal está ganando importancia, y en cuanto a RPC / encoded se refiere, la WS-I (Web Services Interoperability Organization ), en su versión 1.0a de perfil Básico de agosto de 2003 descartó el uso de la codificación SOAP con Servicios Web, a lo que podríamos afirmar que documento / literal y RPC / literal serán las únicas combinaciones permitidas de uso en el futuro.