Choice y Split: Procesamiento de una Lista de Pedidos
Caso de Uso
Consideremos un escenario en el que una empresa desea procesar una lista de pedidos recibidos de un sistema externo. Cada pedido tiene un valor total, y la empresa necesita enviar los pedidos con un valor superior a R$ 10.000 a un endpoint específico para procesamiento prioritario, mientras que los demás pedidos son enviados a un endpoint estándar.
La integración sigue esta ruta:
-
Inicio del flujo:
Se expone un endpoint REST para iniciar el flujo de procesamiento de pedidos.
-
Obtención de la lista de pedidos:
Se realiza una solicitud GET a un endpoint que devuelve una lista de pedidos en formato JSON.
-
Deserialización de los datos:
La respuesta JSON se deserializa utilizando la biblioteca Jackson para convertir los datos en objetos utilizables.
-
Procesamiento de los pedidos:
Se itera sobre la lista de pedidos. Para cada pedido, se verifica si el valor total es superior a R$ 10.000.
-
Envío de los pedidos:
Los pedidos con un valor superior a R$ 10.000 se envían a un endpoint específico para procesamiento prioritario. Los pedidos con un valor inferior o igual a R$ 10.000 se envían a un endpoint estándar para procesamiento regular.
Descripción de los steps
A continuación, se describe cada una de las etapas ejecutadas:
-
Inicio del flujo: el flujo comienza con una solicitud
GET
al endpoint/startflow
.- from: Description: Endpoint REST que inicia el flujo uri: rest:get:/startflow
-
Obtención de la lista de pedidos: luego, el flujo realiza una nueva solicitud
GET
a un endpoint que devuelve una lista de artículos.steps: - toD: uri: https://example.com/api/list parameters: bridgeEndpoint: true httpMethod: GET
-
Deserialización de los datos: la respuesta de la solicitud
GET
se trata como un JSON y se deserializa utilizando la biblioteca Jackson. Esto permite que el flujo maneje los datos como objetos en lugar de solo texto sin formato.- unmarshal: json: library: Jackson
-
Procesamiento de los pedidos: el siguiente step divide la respuesta JSON para que cada elemento pueda procesarse individualmente. La expresión
${body}
se refiere al contenido de la respuesta que fue deserializada en el step anterior.- split: expression: simple: expression: ${body}
-
Envío de los pedidos: el Choice define que para cada elemento de la lista:
-
Si el valor de
value
es mayor que10.000
, se envía unPOST
ahttps://example.com/api/true-endpoint
.steps: - choice: when: - expression: simple: "${body[value] > 10.000}" steps: - toD: uri: https://example.com/api/true-endpoint parameters: bridgeEndpoint: true httpMethod: POST
-
De lo contrario, se envía un
POST
ahttps://example.com/api/false-endpoint
.otherwise: steps: - toD: uri: https://example.com/api/false-endpoint parameters: bridgeEndpoint: true httpMethod: POST
-
Source Code
A continuación, se muestra el script completo del flujo de integración descrito:
- from:
Description: Endpoint REST que inicia el flujo
uri: rest:get:/startflow # Endpoint que inicia el flujo
steps:
- toD:
uri: https://example.com/api/list # Llamada GET para obtener la lista de elementos
parameters:
bridgeEndpoint: true
httpMethod: GET # Definiendo el método HTTP como GET
- unmarshal:
json:
library: Jackson # Usando la biblioteca Jackson para deserializar la respuesta JSON
- split:
expression:
simple:
expression: ${body} # Dividiendo la respuesta para iterar sobre los elementos de la lista
steps:
- choice:
when:
- expression:
simple: "${body[value] > 10.000}" # Condición para verificar si el valor del campo 'value' es mayor que 10.000
steps:
- toD:
uri: https://example.com/api/true-endpoint # Endpoint que se llama si la condición es verdadera
parameters:
bridgeEndpoint: true
httpMethod: POST # Método HTTP POST
otherwise:
steps:
- toD:
uri: https://example.com/api/false-endpoint # Endpoint que se llama si la condición es falsa
parameters:
bridgeEndpoint: true
httpMethod: POST # Método HTTP POST
Los parámetros avanzados de EIPs y componentes aún no están disponibles en el formulario de configuración de los steps en la pestaña Diagram. Para agregarlos, use la pestaña Source Code. |
Share your suggestions with us!
Click here and then [+ Submit idea]