Choice e Split: Processamento de uma Lista de Pedidos

Caso de uso

Consideremos um cenário em que uma empresa deseja processar uma lista de pedidos recebidos de um sistema externo. Cada pedido possui um valor total, e a empresa precisa encaminhar os pedidos com valor superior a R$ 10.000 para um endpoint específico para processamento prioritário, enquanto os demais pedidos são enviados para um endpoint padrão.

A integração segue a seguinte rota:

  1. Início do fluxo:

    Um endpoint REST é exposto para iniciar o fluxo de processamento dos pedidos.

  2. Obtenção da lista de pedidos:

    Uma chamada GET é realizada para um endpoint que retorna uma lista de pedidos em formato JSON.

  3. Desserialização dos dados:

    A resposta JSON é desserializada utilizando a biblioteca Jackson para converter os dados em objetos utilizáveis.

  4. Processamento dos pedidos:

    A lista de pedidos é iterada. Para cada pedido, verifica-se se o valor total é superior a R$ 10.000.

  5. Encaminhamento dos pedidos:

    Pedidos com valor superior a R$ 10.000 são enviados para um endpoint específico para processamento prioritário. Pedidos com valor inferior ou igual a R$ 10.000 são enviados para um endpoint padrão para processamento regular.

Diagram

example split choice

Descrição dos steps

Confira abaixo a descrição das etapas executadas:

  1. Início do fluxo: o fluxo começa com uma requisição GET no endpoint /startflow.

    - from:
        Description: Endpoint REST que inicia o fluxo
        uri: rest:get:/startflow
  2. Obtenção da lista de pedidos: depois o fluxo faz uma nova requisição GET para um endpoint que retorna uma lista de itens.

    steps:
      - toD:
          uri: https://example.com/api/list
          parameters:
            bridgeEndpoint: true
            httpMethod: GET
  3. Desserialização dos dados: a resposta da chamada GET é tratada como um JSON e é desserializada utilizando a biblioteca Jackson. Isso permite que o fluxo manipule os dados como objetos em vez de apenas texto bruto.

    - unmarshal:
        json:
          library: Jackson
  4. Processamento dos pedidos: o próximo step divide a resposta JSON para que cada item possa ser processado individualmente. A expressão ${body} refere-se ao conteúdo da resposta que foi desserializada no step anterior.

    - split:
        expression:
          simple:
            expression: ${body}
  5. Encaminhamento dos pedidos: o Choice define que para cada item da lista:

    • Se o valor de value for maior que 10.000, um POST é enviado para 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
    • Caso contrário, um POST é enviado para https://example.com/api/false-endpoint.

      otherwise:
        steps:
          - toD:
              uri: https://example.com/api/false-endpoint
              parameters:
                bridgeEndpoint: true
                httpMethod: POST

Source Code

Veja abaixo o script completo do fluxo de integração descrito:

- from:
    Description: Endpoint REST que inicia o fluxo
    uri: rest:get:/startflow  # Endpoint que inicia o fluxo
    steps:
      - toD:
          uri: https://example.com/api/list  # Chamada GET para obter a lista de itens
          parameters:
            bridgeEndpoint: true
            httpMethod: GET  # Definindo o método HTTP como GET
      - unmarshal:
          json:
            library: Jackson  # Usando a biblioteca Jackson para desserializar a resposta JSON
      - split:
          expression:
            simple:
              expression: ${body}  # Dividindo a resposta para iterar sobre os itens da lista
          steps:
            - choice:
                when:
                  - expression:
                      simple: "${body[value] > 10.000}"  # Condição para verificar se o valor do campo 'value' é maior que 10.000
                    steps:
                      - toD:
                          uri: https://example.com/api/true-endpoint  # Endpoint a ser chamado se a condição for verdadeira
                          parameters:
                            bridgeEndpoint: true
                            httpMethod: POST  # Método HTTP POST
                otherwise:
                  steps:
                    - toD:
                        uri: https://example.com/api/false-endpoint  # Endpoint a ser chamado se a condição for falsa
                        parameters:
                          bridgeEndpoint: true
                          httpMethod: POST  # Método HTTP POST
Os parâmetros avançados de EIPs e componentes ainda não estão disponíveis no formulário de configuração dos steps na aba Diagram. Para adicioná-los, use a aba Source Code.
Thanks for your feedback!
EDIT

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