Import WSDL

Esta funcionalidad permite que servicios expuestos por medio del protocolo SOAP y descritos en documentos WSDL, sean convertidos parcialmente en APIs de REST para ser utilizados. El usuario podrá entonces usar la API registrada para llamar los servicios y operaciones expuestos en SOAP, de manera más directa y usando formatos dictados en la arquitectura REST.

Cuando el API Manager lee el archivo WSDL importado, todos los puertos y operaciones presentes en el WSDL se transforman en recursos y operaciones de una API de REST.

Arquitectura

Internamente, el flujo de ejecución de una petición a un servicio WSDL ocurre de la siguiente forma:

Vamos a considerar para los ejemplos a continuación la utilización de una API con una operación llamada /convertweight (http://www.webservicex.net/ConvertWeight.asmx?WSDL).
wsdl call arch

En la imagen anterior, hemos representado lo que sucede en el gateway durante una llamada. Primeramente, tenemos la transformación de los datos pasados en el cuerpo de la petición de JSON para XML. Enseguida, el interceptor de XSL Transformation realiza la transformación a través del mapeo de los datos XML en el cuerpo con el XSL presente dentro del propio interceptor para la creación de un envelope SOAP válido para ser usado posteriormente en una llamada HTTP POST común, como demostrado en la imagen a continuación:

wsdl call back

Después que el servidor SOAP retorna la respuesta de la ejecución de la petición POST, la respuesta de esta petición retorna al gateway para sufrir otra transformación. El envelope SOAP con el resultado de la operación pasa nuevamente por un interceptor XSL Transformation, que tiene la función de transformar el contenido del envelope SOAP en un JSON, usando el mapeo presente en un documento XSL salvado dentro del interceptor. Una vez que esta transformación se completa, el gateway retorna un cuerpo JSON para el cliente.

Importar un WSDL

El registro de una API para uso del WSDL es muy semejante al registro de una API común. Para iniciar, hacer clic en el botón Import WSDL de la sección Resources de una API (cuando está creando una nueva API o editando una existente).

wsdl import button

Será abierta una ventana modal, donde será posible realizar la importación del archivo WSDL de dos formas: a través de inserción de la URL donde el WSDL está hospedado:

wsdl import url modal

o subiendo un archivo con extensión .wsdl o .xml:

wsdl import file modal

Después de la elección del método para subir el archivo WSDL, realizar la validación del formato del archivo cargado haciendo clic en el botón Validate. El contenido del archivo solo será subido al servidor si los datos del archivo y URL insertados estuvieren correctos.

El botón Validate puede retornar los siguientes mensajes de error para el caso que el archivo o URL cargado sean inválidos. Para el caso de falla en la lectura del WSDL de una URL, el siguiente mensaje será exhibido:

wsdl invalid url

En la imagen anterior, tenemos el ejemplo de URL con formato correcto siendo pasado, pero la lectura del WSDL presente en esta URL presentó falla por estar con algún contenido inválido en su integridad, entonces la aplicación presenta el mensaje «Error Loading WSDL».

Pero si el formato de URL es inválido, el siguiente mensaje será exhibido:

wsdl invalid url

En este caso, el formato de la URL está correcto, pero la lectura del WSDL presente en esta URL no tuvo éxito porque el archivo tiene algún contenido inválido en su integridad.

A su vez, si el formato de la URL es inválido (sólo se aceptan las URL que empiezan por http(s)://), aparecerá el siguiente mensaje:

wsdl invalid url format

Si la importación del WSDL ocurre por medio de archivos, tenemos la validación siendo presentada de la siguiente manera: intentando validar un archivo de extensión inválida, el mensaje «Invalid WSDL Format» será exhibido, indicando que el formato pasado en el archivo no es aceptado por la aplicación (sólo archivos con formato .wsdl o .xml serán válidos).

wsdl invalid file format

Si el formato de archivo es válido pero hay problemas con su contenido, el mensaje de validación presentado será el siguiente:

wsdl invalid file load

En el ejemplo anterior, la validación del archivo acusó que el contenido del WSDL es inválido, causando algún tipo de error en la carga del archivo.

Si el archivo elegido tiene la extensión correcta y un contenido intacto, el botón Validate devolverá un mensaje de éxito y el botón Upload se activará.

wsdl valid file upload

Después de la importación ser completada, el usuario será dirigido para la pantalla de listado de los servicios y operaciones presentes en el WSDL. (En el ejemplo mostrado a continuación, usamos el WSDL del servicio de rastreo presente en el sitio web de la Compañía Postal de Brasil: http://webservice.correios.com.br/service/rastro/Rastro.wsdl.]

wsdl listing

La pantalla exhibe cada servicio descrito en el WSDL (ServicePortBinding) con su conjunto de operaciones (buscaEventosLista y buscaEventos).

Podemos observar que, al expandir un servicio del WSDL, tenemos la lista de las siguientes informaciones:

  • WSDL Operation: representa la operación presente dentro del WSDL y disponible en el servicio SOAP expuesto.

  • Description: descripción (no obligatoria) de lo que hace la operación.

  • REST Method: será utilizado para la creación del recurso de REST, representa el método del cual será registrado el recurso de la API. Por defecto, este método es siempre POST, pues servicios del tipo SOAP aceptan POST. Para otros casos, talvez sea necesario crear transformaciones a través de interceptores para la conversión del método.

  • REST Operation: representa la operación de REST que aquel elemento se tornará.

Para transformar cada una de estas operaciones en recursos de su API, seleccionar los ítems deseados, definir el método HTTP que cada uno representará y modificar el nombre de cada recurso en el caso que sea necesario.

Después de completo, hacer clic en el botón Save and return to Resources. Usted será redirigido para la pantalla de listado de recursos con los ítems ya transformados:

wsdl selecting operations

Después de esta etapa, puede continuar con el flujo normal de creación de la API.

En el caso que sea necesario incluir o editar algún recurso creado a partir de un WSDL, debe ser importado el WSDL nuevamente, y todos los recursos ya registrados que formen parte de aquel WSDL vendrán marcados en la exhibición de las operaciones del WSDL.

La URL de destino de sus nuevos recursos de REST será el endpoint del servicio WSDL.

Interceptores relacionados a la importación del WSDL

Después de realizar la importación de un archivo WSDL y crear los recursos relacionados, cada operación generada de un WSDL tendrá la inclusión de 6 interceptores que ayudarán en la llamada y ejecución de cada operación (puede ver más sobre interceptores aquí). Estos interceptores son:

Flujo de Petición

1 XSL Transformation

Este interceptor contiene, en su interior, un archivo en formato XSL para transformaciones en el gateway.

2 Header

El primero interceptor de Header indica el Content-Type usado para tráfico de informaciones de entrada en el gateway (text/xml). El segundo interceptor indica el valor del SOAPAction de la operación que será ejecutada. En el caso que el servicio no tenga SOAPAction atribuido, este interceptor no será creado.

1 HTTP Method

Realizado para la conversión del método llamado para POST, siguiendo el estándar SOAP.

Flujo de Respuesta

1 XSL Transformation

Contienen el archivo XSL responsable de la transformación de la respuesta de la llamada para el formato JSON, siguiendo los mapeos presentes en el archivo.

2 Header

Este interceptor indica el Content-Type usado en la respuesta del servidor (application/json).

wsdl interceptors

En el ejemplo anterior, tenemos la aplicación de los interceptores en el recurso /buscaeventos. Estos interceptores serán usados por el gateway para la ejecución de las llamadas a esta u otras operaciones creadas.

En el caso que sea necesario, todos los interceptores presentes pueden ser editados y nuevos interceptores pueden ser adicionados para ayudar en la ejecución de los procesos.
Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]