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:

  1. Inicio del flujo:

    Se expone un endpoint REST para iniciar el flujo de procesamiento de pedidos.

  2. Obtención de la lista de pedidos:

    Se realiza una solicitud GET a un endpoint que devuelve una lista de pedidos en formato JSON.

  3. Deserialización de los datos:

    La respuesta JSON se deserializa utilizando la biblioteca Jackson para convertir los datos en objetos utilizables.

  4. 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.

  5. 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.

Diagram

example split choice

Descripción de los steps

A continuación, se describe cada una de las etapas ejecutadas:

  1. 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
  2. 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
  3. 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
  4. 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}
  5. Envío de los pedidos: el Choice define que para cada elemento de la lista:

    • Si el valor de value es mayor que 10.000, se envía un POST a https://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 a https://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.
Thanks for your feedback!
EDIT

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