6 de Março de 2025
Webhooks, retries, duplicação, assinatura e ordem de eventos
Como tratar webhook como integração assíncrona de verdade, e não como um POST simpático que sempre chega uma vez e na ordem certa.
Andrews Ribeiro
Founder & Engineer
3 min Intermediario Sistemas
O problema
Muita equipe trata webhook como se fosse só um endpoint comum com iniciativa invertida.
Algo assim:
“O provedor vai fazer um POST aqui e a gente processa.”
Essa explicação e curta demais para ser segura.
Porque webhook real costuma trazer quatro dores junto:
- retry automático
- duplicação
- ordem incerta
- necessidade de validar se aquela mensagem veio mesmo de quem diz que veio
Se você ignora essas quatro coisas, a integração parece simples até o primeiro incidente.
Modelo mental
Webhook e uma notificação externa e assíncrona de um sistema que você não controla.
Isso muda o desenho.
Em vez de pensar “uma request para meu backend”, pense:
“estou recebendo um evento de fora, possivelmente repetido, possivelmente atrasado, e preciso decidir se confio nele e como transformo isso em estado interno seguro.”
Esse modelo mental elimina muita ingenuidade logo no começo.
Quebrando o problema
Retries sao normais
O provedor tenta de novo quando:
- recebeu timeout
- sua aplicação respondeu
5xx - a confirmação não ficou clara
Isso significa que o mesmo webhook pode chegar mais de uma vez sem que haja bug nenhum no provedor.
Duplicação precisa de deduplicação
Se o provedor manda o mesmo event_id duas vezes, seu sistema não pode:
- criar duas cobrancas
- liberar acesso duas vezes
- mandar o mesmo email dez vezes
O jeito mais comum de tratar isso e guardar um identificador de evento já processado.
Assinatura não e detalhe
Webhook vem de fora.
Logo, você precisa validar se aquela mensagem veio mesmo do provedor esperado e se não foi adulterada.
Assinatura ajuda exatamente nisso.
Ela não substitui:
- autorização interna
- idempotencia
- validação de ordem
Mas sem assinatura, você corre o risco de aceitar evento inventado por qualquer origem.
Ordem de eventos nem sempre e garantida
Esse ponto pega muita gente.
O provedor pode emitir:
payment_succeededrefund_created
Mas a entrega pode chegar invertida no seu sistema.
Se a sua lógica depende de “sempre recebo em ordem”, você construiu uma premissa frágil.
Exemplo simples
Imagine um provedor de pagamento mandando webhooks para seu sistema.
Fluxo mais robusto:
- receber a request
- validar assinatura
- extrair
event_id - registrar que o evento chegou
- responder rápido
- processar o efeito de negócio de forma assíncrona e idempotente
Agora, se o mesmo evento vier de novo, o sistema reconhece que já passou por ali.
Se o processamento falhar, você consegue reprocessar sem depender do provedor insistir.
Se a ordem vier estranha, seu modelo interno precisa ser capaz de reconciliar estado sem assumir linearidade perfeita da entrega.
Erros comuns
- Fazer processamento pesado antes de responder o webhook.
- Confiar no corpo recebido sem validar assinatura.
- Assumir que evento chega uma vez só.
- Assumir ordem implicita sem ler a garantia real do provedor.
- Usar retry sem idempotencia e multiplicar efeito colateral.
Como um senior pensa
Quem tem mais experiência trata webhook como integração distribuida, não como formulario vindo de outro sistema.
O raciocínio costuma ser:
“Eu preciso autenticar a origem, aceitar repetição, sobreviver a atraso e desacoplar recebimento de processamento.”
Essa postura parece mais trabalhosa no começo, mas evita integração fraca e incidente chato depois.
O que o entrevistador quer ver
Em entrevista, webhook revela se você entende integração do mundo real.
O avaliador quer ver se você:
- fala de assinatura
- fala de duplicidade
- não assume ordem sem garantia
- sugere resposta rápida e processamento posterior
Uma resposta forte costuma soar assim:
“Eu trataria webhook como evento externo e assíncrono. Validaria assinatura, deduplicaria por
event_id, responderia rápido e processaria de forma idempotente sem assumir ordem perfeita.”
Webhook robusto não depende de boa vontade da rede nem da fantasia de ordem perfeita dos eventos.
Resumo rápido
O que vale manter na cabeça
- Webhook deve ser tratado como entrada externa, assíncrona e não confiavel por padrão.
- Retries e duplicação sao comportamento normal, não exceção.
- Assinatura valida autenticidade da mensagem, mas não corrige ordem nem idempotencia.
- Receber rápido, validar, persistir e processar depois costuma ser desenho mais robusto.
Checklist de pratica
Use isto ao responder
- Consigo explicar por que webhook não deve depender de processamento pesado no request?
- Sei dizer como validar assinatura e por que isso importa?
- Consigo descrever uma estratégia para deduplicar evento repetido?
- Sei explicar por que ordem de eventos não deve ser assumida sem garantia explicita?
Você concluiu este artigo
Próximo passo
Versionamento de API na prática Próximo passo →Compartilhar esta página
Copie o link manualmente no campo abaixo.