Saltar la navegación

1.3.2.- Descripción del servicio: WSDL (III).

Imagen de dos ruedas dentadas.
Everaldo Coelho and YellowIcon (GNU/GPL)

Ahora que ya sabes cómo definir los tipos de datos que se usan en un servicio web, el siguiente paso es indicar cómo se agrupan esos tipos para formar los parámetros de entrada y de salida. Veámoslo con un ejemplo. Siguiendo con los usuarios que acabamos de definir, podríamos crear en el servicio web una función getUsuario() para dar acceso a los datos de un usuario. Como parámetro de entrada de esa función vamos a pedir el "id" del usuario, y como valor de salida se obtendrá un objeto "usuario". Por tanto, debemos definir los siguientes mensajes:

<message name="getUsuarioRequest">
    <part name="id" type="xsd:int"/>
</message>
<message name="getUsuarioResponse">
    <part name="getUsuarioReturn" type="tns:usuario"/>
</message>

Como ves, normalmente por cada función del servicio web se crea un mensaje para los parámetros de entrada, y otro para los de salida. Dentro de cada mensaje, se incluirán tantos elementos part como sea necesario. Cada mensaje contendrá un atributo name que debe ser único para todos los elementos de este tipo. Además, es aconsejable que el nombre del mensaje con los parámetros de entrada acabe en Request, y el correspondiente a los parámetros de salida en Response.

Imagen de un diagrama con los posibles estilos de enlazado en WSDL: RPC (literal o encoded) y document (literal, pues el encoded no se utiliza).
DIA (Elaboración propia)

En un documento WSDL podemos especificar dos estilos de enlazado: document o RPC. La selección que hagamos influirá en cómo se transmitan los mensajes dentro de las peticiones y respuestas SOAP. Por ejemplo, un mensaje SOAP con estilo document podría ser:

<SOAP-ENV:Body>
    <producto>
        <codigo>KSTMSDHC8GB</codigo>
    </producto>
</SOAP-ENV:Body>

Y un mensaje con estilo RPC sería por ejemplo:

<SOAP-ENV:Body>
    <ns1:getPVP>
        <param0 xsi:type="xsd:string">KSTMSDHC8GB</param0>
    </ns1:getPVP>
</SOAP-ENV:Body>

El estilo de enlazado RPC está más orientado a sistemas de petición y respuesta que el document (más orientado a la transmisión de documentos en formato XML). En este estilo de enlazado, cada elemento message de WSDL debe contener un elemento part por cada parámetro (de entrada o de salida), y dentro de éste indicar el tipo de datos del parámetro mediante un atributo type, como se muestra en el ejemplo anterior.

Además, cada estilo de enlazado puede ser de tipo encoded o literal (aunque en realidad la combinación document/encoded no se utiliza). Al indicar encoded, estamos diciendo que vamos a usar un conjunto de reglas de codificación, como las que se incluyen en el propio protocolo SOAP (espacio de nombres "http://schemas.xmlsoap.org/soap/encoding/"), para convertir en XML los parámetros de las peticiones y respuestas.

El ejemplo anterior de RPC es en realidad RPC/encoded. Un ejemplo de un mensaje SOAP con estilo RPC/literal sería:

<SOAP-ENV:Body>
    <ns1:getPVP>
        <param0>KSTMSDHC8GB</param0>
    </ns1:getPVP>
</SOAP-ENV:Body>

En lo sucesivo, trabajaremos únicamente con estilo de enlazado RPC/encoded.