# Boas práticas ao validar mensagens em um pipeline 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.

2. ### **Otimização dos dados enviados ao consumer**

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

```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:

```json
{
  "produtos": [
    {
      "codigo": "123",
      "nome": "Produto A"
    },
    {
      "codigo": "456",
      "nome": "Produto B"
    }
  ]
}
```

Enviar o JSON completo para o **Pipeline B** incluiria dados desnecessários. Em vez disso, use um conector [**Transformer (JOLT)**](/documentation/connectors-and-triggers/pt-br/connectors/tools/jolt-v2.md), [**JSON Generator**](/documentation/connectors-and-triggers/pt-br/connectors/tools/json-generator.md), ou [**Event**](/documentation/connectors-and-triggers/pt-br/connectors/queues-and-messaging/event-publisher.md) 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.

3. ### **Validação de dados e contratos**

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

* [**Conector Validator**](/documentation/connectors-and-triggers/pt-br/connectors/tools/validator-v2.md)**:** Use um JSON Schema para definir precisamente o JSON esperado pelo consumer.
* [**Conector Choice**](/documentation/connectors-and-triggers/pt-br/connectors/logic/choice.md)**:** 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/resources/pt-br/best-practices/validating-messages-on-a-consumer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
