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:
- 
Início do fluxo:
Um endpoint REST é exposto para iniciar o fluxo de processamento dos pedidos.
 - 
Obtenção da lista de pedidos:
Uma chamada GET é realizada para um endpoint que retorna uma lista de pedidos em formato JSON.
 - 
Desserialização dos dados:
A resposta JSON é desserializada utilizando a biblioteca Jackson para converter os dados em objetos utilizáveis.
 - 
Processamento dos pedidos:
A lista de pedidos é iterada. Para cada pedido, verifica-se se o valor total é superior a R$ 10.000.
 - 
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.
 
Descrição dos steps
Confira abaixo a descrição das etapas executadas:
- 
Início do fluxo: o fluxo começa com uma requisição
GETno endpoint/startflow.- from: Description: Endpoint REST que inicia o fluxo uri: rest:get:/startflow - 
Obtenção da lista de pedidos: depois o fluxo faz uma nova requisição
GETpara um endpoint que retorna uma lista de itens.steps: - toD: uri: https://example.com/api/list parameters: bridgeEndpoint: true httpMethod: GET - 
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 - 
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} - 
Encaminhamento dos pedidos: o Choice define que para cada item da lista:
- 
Se o valor de
valuefor maior que10.000, umPOSTé enviado parahttps://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 parahttps://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. | 
Share your suggestions with us!
          Click here and then [+ Submit idea] 
