For the complete documentation index, see llms.txt. This page is also available as Markdown.

Boas práticas ao validar mensagens em um pipeline consumer

Conheça as melhores práticas para transferir mensagens entre processos e validar mensagens recebidas por um consumer.

Ao gerenciar integrações que exigem segregação, dividir a integração em múltiplos pipelines pode melhorar a clareza e eficiência. A seguir, veja um exemplo de cenário e algumas práticas recomendadas.

Cenário de exemplo: Processamento de pedidos de pagamento em um e-commerce

Imagine uma integração que processa pedidos de um e-commerce. Para gerenciar eficientemente um grande volume de pedidos, você decide dividir a integração em dois pipelines:

  • Pipeline A: Recupera os pedidos de uma API.

  • Pipeline B (consumer): Recebe os dados dos produtos extraídos dos pedidos e os envia para outra API.

  1. Uso de Eventos para a segregação do processo

Para integrar processos que demandam segregação, use Eventos para delegar tarefas específicas a outro pipeline (o consumer).

Nesse contexto, é essencial:

  • Definir precisamente os dados que o consumidor receberá.

  • Estabelecer um contrato claro entre os processos.

Isso assegura que a mensagem transmitida seja precisa, concisa e válida, facilitando a comunicação e reduzindo possíveis erros entre os dois processos.

  1. Otimização dos dados enviados ao consumer

No Pipeline A, a API de pedidos retorna o seguinte JSON:

{
  "status": 200,
  "body": {
    "numPedido": "001",
    "produtos": [
      {
        "codigo": "123",
        "nome": "Produto A"
      },
      {
        "codigo": "456",
        "nome": "Produto B"
      }
    ],
    "cliente": {
      "nome": "Cliente Exemplo",
      "cpf": "123.456.789-10",
      "email": "cliente@email.com",
      "enderecos": {
        "logradouro": "Rua de Exemplo",
        "numero": "10",
        "cep": "01010-10"
      }
    }
  },
  "headers": {
    "Cache-Control": "no-cache,must-revalidate,max-age=0,no-store,private",
    "Content-Type": "application/json;charset=UTF-8",
    "Date": "Wed, 01 Jul 2020 19:04:46 GMT",
    "Expires": "Thu, 01 Jan 1970 00:00:00 GMT",
    "Set-Cookie": "BrowserId=up7LXrwv46wesv5NEeg9ps_4AgB_",
    "Strict-Transport-Security": "max-age=31536000; includeSubDomains",
    "Transfer-Encoding": "chunked",
    "Vary": "Accept-Encoding",
    "X-B3-Sampled": "0",
    "X-B3-SpanId": "8c419a93i3bsi0=9d8e54316",
    "X-B3-TraceId": "8c419a9389gba9y54316",
    "X-Content-Type-Options": "nosniff",
    "X-ReadOnlyMode": "false",
    "X-XSS-Protection": "1; mode=block"
  }
}

Contudo, para o Pipeline B, apenas o array de "produtos" é necessário:

Enviar o JSON completo para o Pipeline B incluiria dados desnecessários. Em vez disso, use um conector Transformer (JOLT), JSON Generator, ou Event para processar o JSON e garantir que somente as informações essenciais de “produtos” sejam enviadas.

Por que evitar o envio de payloads JSON completos?

Enviar o JSON completo pode sobrecarregar o Pipeline B com dados irrelevantes, possivelmente incluindo centenas de linhas, quando apenas uma fração é necessária. Limitar a transferência de dados às informações essenciais melhora a eficiência, independemente do volume de dados.

Outros benefícios incluem:

  • Logs de execução: Mensagens menores resultam em logs mais claros e fáceis de gerenciar.

  • Manutenção: Dados simplificados facilitam a resolução de problemas e atualizações, especialmente quando pessoas diferentes estão envolvidas em manter a integração.

  1. Validação de dados e contratos

Para uma validação de dados robusta, o Pipeline B pode usar:

  • Conector Validator: Use um JSON Schema para definir precisamente o JSON esperado pelo consumer.

  • Conector Choice: Use JSONPath para validar elementos específicos na mensagem recebida. Por exemplo, expressões como $.produtos or $.produtos[?(@.codigo && @.nome)] garantem que somente dados válidos sejam processados.

Caso essas condições não sejam atendidas, um fluxo de erro será acionado, interrompendo o processo devido ao descumprimento do contrato especificado.

Atualizado

Isto foi útil?