Como invocar un servicio REST desde Bizagi
De
<keywords content="keywords"> rest, restful, servicio web rest, servicio rest, servicio web, google, yahoo, twitter, facebook, google maps, soa, json, amazon, ebay, google maps </keywords>
Aplica para las ediciones ENTERPRISE .NET y XPRESS |
Contenido
|
Cómo invocar un servicio REST desde Bizagi
Introducción
Bizagi soporta la invocación de Servicios REST disponibles en la web, de manera que el proceso envíe información de negocio y la información de respuesta se actualice de manera automática en el modelo de datos.
Los servicios REST son "web-based" (utilizan protocolos de la web). La configuración para este tipo de invocaciones se realiza a través del mismo asistente de interfaces de Bizagi, en el cual se configura cualquier invocación a un servicio Web.
El siguiente diagrama ilustra este concepto:
Antes de continuar con el artículo, se mencionarán algunas características de los servicios REST y algunas diferencias entre los Servicios REST y los Servicios Web tradicionales (SOAP); principalmente porque ambos son importantes y utilizados frecuentemente en las aplicaciones actuales (el enfoque de un tipo de servicio no busca reemplazar al otro).
Tenga en cuenta que Bizagi soporta desde su asistente de interfaces, la invocación de ambos tipos de servicios: REST y SOAP. Si desea ver información relacionada con la invocación en Bizagi de los Servicios Web tradicionales (SOAP), diríjase al artículo de Servicios Web desde Bizagi.
Comparación entre Servicios REST y Servicios SOAP
Primero que todo, es importante entender que el concepto de los servicios REST es presentado como la alternativa a seguir para consultar información desde dispositivos móviles.
De acuerdo a esta idea, a través de los dispositivos móviles es común acceder a información en línea que se encuentre en sitios web (por ejemplo sobre mapas, información general, actualizaciones en redes sociales, tasas de cambio, reportes de clima, precios de productos, etc.). Por esta razón los servicios REST exponen "recursos" de información para ser consumidos a través del protocolo HTTP (o HTTPS).
El diseño y uso de los servicios REST tiene un enfoque diferente al presentado por los Servicios Web SOAP. Los Servicios Web SOAP tienen implícito un diseño SOA, dentro de los sistemas internos de una empresa, con la posibilidad de tener medidas de seguridad más fuertes o adicionales para su acceso.
Cuando se consume un Servicio SOAP o REST, la configuración de acceso difiere entre los dos en el siguiente aspecto:
Cuando se invoca un Servicio Web SOAP, el sistema puede interpretar y utilizar una definición previa de este Servicio (es decir, la estructura esperada de entradas y salidas). Esto se describe a través del WSDL publicado en el diseño y contrucción del Servicio Web de tipo SOAP.
Cuando se invoca un servicio REST, por defecto, el sistema no tiene una definición previa para la interpretación de la estructura de parámetros de entrada y salida de este servicio. Esta tarea se delega entonces al usuario que realiza la invocación.
Sobre los servicios REST
Los servicios REST presentan 4 posibles métodos (que corresponden a los 4 posibles métodos HTTP) para consumir los recursos expuestos: Get, Post, Put, y Delete. Cada método para realizar una acción correspondiente (consultar datos, crear, actualizar o eliminar).
La siguiente tabla contiene la información del método HTTP que se debe usar de acuerdo al requerimiento:
Acción | Método HTTP |
Create (Crear) |
PUT |
Read (Consultar) |
GET |
Update (Actualizar) |
POST |
Delete (Eliminar) |
DELETE |
Tenga en cuenta que los pasos varían ligeramente de acuerdo al método de la interfaz seleccionado en el Asistente de Bizagi (el método HTTP seleccionado para el servicio REST). Al utilizar los métodos POST o PUT (en los cuales se envia información para persistir como recurso), se debe enviar dicha información (a crear o actualizar) en una configuración de un paso adicional.
Prerrequisitos
Tenga en cuenta que por su naturaleza, los Servicios REST son presentados a través de internet, y por sitios web que publican información mundial.
Por lo tanto, es necesario consultar previamente la documentación del servicio REST que se desea invocar, para así poder conocer cuáles son los parámetros de entrada del servicio, así como la estructura de la respuesta del servicio.
Los APIs de los Servicios REST presentan tanto: esta documentación sobre sus estructuras, así como los ejemplos respectivos para sus 4 métodos HTTP posibles para consumir estos recursos: Get, Post, Put y Delete.
Lo que debe hacer en Bizagi
Es posible invocar un servicio REST de un sistema externo desde cualquier Actividad de un proceso en Bizagi.
Para configurar este tipo de invocación, se utiliza el ayudante de interfaces de Bizagi para definir qué información se envía desde el proceso, y cómo se actualizará en el mismo la información recibida.
De manera resumida, la configuración para la invocación de un servicio REST en Bizagi se realiza con los siguientes pasos:
1. Creando la invocación a la interfaz.
2. Especificando el tipo de servicio, URL y método.
3. Mapeando toda la información de entrada para el servicio.
4. Mapeando la información de respuesta del servicio.
5. Configurando el manejo opcional de errores.
Ejemplo
En el siguiente ejemplo, se mostrará cómo invocar un servicio REST del API de Google Maps, directamente desde un proceso en Bizagi.
Como se describió previamente en este artículo, como prerrequisito se requiere entender cómo se debe estructurar la información en una invocación a los Servicios REST de Google Maps.
Esta información se puede consultar desde la documentación que expone el Sitio Web del servicio: developers.google.com/maps/documentation/geocoding/.
Para este ejemplo específico, usaremos el API de Geocoding para enviar una dirección, y obtener de vuelta sus coordenadas, representadas como latitud y longitud ("latitude" y "longitude").
Alerta: En la versión 9.1.9 de Bizagi, la invocación de los Servicios REST desde el ayudante no soporta respuestas con formato JSON. La configuración del ayudante de esta versión soporta respuestas con formato XML. |
Utilizaremos también el servicio REST disponible que retorna la información en una respuesta formateada en XML (nótese que estos servicios son usualmente disponibilizados tanto con formato de respuesta XML y JSON).
La invocación de servicios REST desde el asistente de interfaces en Bizagi 9.1.9, soporta formatos de respuesta en XML (y no en JSON).
En la invocación del servicio REST de nuestro ejemplo, se empleará el proceso de "Crear Proveedor" (Create Vendor) para ilustrar su configuración y uso:
En nuestro proceso de ejemplo, nuestro modelo de datos es:
Nótese que este ejemplo utiliza una invocación de un servicio REST de Google. Por lo tanto, se requiere que el Servidor BPM tenga acceso a internet para ver este ejemplo funcionando correctamente. Es posible que también se requieran configuraciones adicionales en el navegador para mostrar el mapa (adicionar google maps como un sitio seguro).
Creando la invocación a la interfaz
El primer paso consiste en la creación de una invocación a interfaz dentro de la Tarea de Servicio "Consultar ubicación geográfica (Consult geocode location)".
Esto se realiza accediendo al paso número 6 del Asistente de Procesos ("Integrate" (Integración)) y luego a "Define integration interfaces" (Definir Interfaces):
En esta vista, hacer clic en la Tarea de Servicio "Consult geocode location" para así crear la invocación a la interfaz.
Especificando el tipo de servicio, URL y método
Ahora se debe especificar que esta configuración es para invocar un servicio de tipo REST, y especificar también la dirección URL, el método y los parámetros.
En la ventana que tenemos de la interfaz, seleccionar "REST" como el tipo de servicio:
A partir de la información presentada en la pagína web del API de Google Maps, se debe específicar la URL separada como: la URL de Base (Base URL) y la URL de Servicio (Service URL).
Nota: La URL de Base y la URL de servicio también se especifican en la documentación del Servicio REST. Nótese que la URL de Base es el prefijo de la URL para el cual aún no se han especificado parámetros de invocación. La URL de servicio usualmente contiene parámetros de consulta (query params), cuyos valores se espera que varíen para cada invocación. |
La URL de base en este ejemplo es: http://maps.googleapis.com/maps/api/geocode/xml?.
La URL de servicio para este ejemplo es: address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true
Nótese que la URL de servicio ya incluye una dirección estática de ejemplo ("1600+Amphitheatre+Parkway,+Mountain+View,+CA"). En este proceso, se enviará esta información de manera dinámica desde el atributo "Street Address" (dirección) en el modelo de datos.
Por lo tanto, para definir que la dirección será mapeada de manera dinámica, se definen las variables necesarias dentro de la URL de servicio, entre los caracteres "{", "}". La URL de servicio final es: address={Value1}&sensor=true
Nótese que este método que se está invocando es un método "GET" (para consultar información únicamente), y que este método retorna la información en una estructura XML.
Seguidamente, asignar un nombre a la interfaz y hacer clic en "Siguiente".
Mapeando toda la información de entrada para el servicio
A continuación, se mapeará la información que se enviará a través de las variables definidas anteriormente.
Para hacer esto, se ubica el atributo "Street Address" en el modelo de datos del proceso en Bizagi (la tabla a la izquierda), y se da clic sobre éste.
Una vez seleccionado, se hace clic en la variable "Value1" de la tabla Query_Params a la derecha.
De esta forma, se mapea y se especifica la información que se va a enviar en la invocación:
Nota: Nótese que con este paso hemos finalizado la parte de envío de información porque estamos utilizando el método HTTP para "GET". |
Hacer clic en "Siguiente".
Mapeando la información de respuesta del servicio
Ahora se especificará cómo almacenar la información de la respuesta en los atributos del modelo de datos del proceso en Bizagi.
Para esto, se debe incluir la estructura de la respuesta del servicio REST en la Información de Respuesta (Response Data).
Recuerde que esta invocación espera una respuesta con formato XML, y que la estructura de esta respuesta se consulta en la página web del API del servicio REST. Basado en lo anterior, al dirigirse a developers.google.com/maps/documentation/geocoding/?hl=en#XML, podemos copiar dentro de un archivo .xml el texto XML de ejemplo.
Hacer clic derecho sobre la tabla en la izquierda y cargar su estructura (de respuesta en este caso). Esto se realiza de manera manual (adicionando nodos), o de manera automática cargando la estructura desde un XSD o un archivo XML.
En este ejemplo, se selecciona la opción de "Cargar el XML de ejemplo (Load Sample XML)" para importar, y de esta manera cargar la estructura XML desde el archivo .xml previamente almacenado:
Una vez se tiene la estructura XML en la tabla de datos de Respuesta de Google Maps, se procede a mapear los valores de latitud ("lat") y la longitud ("lng") a los atributos en Bizagi.
Para mapear estos valores, recuerde que se puede: hacer clic en el atributo fuente y luego en el atributo destino, o también arrastrar y soltar una conexión desde la fuente hasta el destino.
Al final, el mapeo de la información de respuesta para este ejemplo lucirá así:
Hacer clic en "Siguiente".
Configuración opcional del manejo de errores
Para este ejemplo no es necesario ningún tipo de validación y manejo de errores:
Por lo tanto, hacer clic en "Finalizar".
Resultado
Ahora, podemos ejecutar el proceso de Crear Proveedor "Create Vendor" y probar el resultado de la invocación desde el portal de trabajo.
Para hacer esto, lance el proceso desde el botón "Run" (Ejecutar) en las opciones de acceso rápido:
En el portal de trabajo, cree un nuevo caso de "Create Vendor" e ingrese la información del Proveedor (su dirección) en la actividad "Register Vendor information" (Registrar información del Proveedor). En el servicio REST del ejemplo, las palabras que componen la dirección se separan por el caracter "+":
Luego de la invocación al Servicio REST de Google Maps, se obtienen las coordenadas de latitud y longitud para la dirección del Proveedor:
En este punto hemos invocado un servicio REST desde Bizagi!
Temas Avanzados y Relacionados
Es posible extender la funcionalidad presentada en este artículo, de manera que en lugar de mostrar los valores de las coordenadas de longitud y latitud, se muestre la ubicación directamente en un mapa de google embebido en Bizagi.
Este enfoque mejorado implica el uso de campos de usuario (userfields) en las formas del proceso. Aprenda Cómo embeber un mapa dinámico de google en Bizagi.
Artículos Relacionados
- Información adicional sobre las opciones de mapeo para REST.
- Servicios Web desde Bizagi.
- Cómo embeber un mapa dinámico de google en Bizagi.
- Vea consideraciones para la invocación de servicios REST.
<comments/>