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
GET
no 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
GET
para 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
value
for 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]