Webhooks: receber eventos sem duplicar ações

Em resumo

Um webhook notifica um evento por HTTP. Não garante universalmente entrega imediata, ordem ou efeitos de negócio exatamente uma vez.

Corredor seguro de servidores e redes sem pessoas Ilustração · cena fictícia
Neste artigo

Separar receção e processamento concluído

As garantias dependem do fornecedor. A Stripe documenta duplicados possíveis e ausência de ordem garantida. Uma resposta HTTP de sucesso deve corresponder a receção duradoura ou processamento previsto, não apenas à chegada à memória.

SituaçãoComportamento esperadoProva útil
Mesmo evento recebido duas vezesEvitar repetir o efeito de negócio.ID processado e resultado persistente.
Evento antigo chega depoisNão substituir cegamente um estado recente.Estado oficial e regra de transição.
Processamento pesadoReceção duradoura e trabalho diferido.Estado da fila e resultado do worker.
Entrega em faltaReconciliar e recuperar segundo o fornecedor.Diferença identificada e correção verificada.

Construir uma receção verificável

  • Verifique HTTPS, assinatura e proteção contra repetição segundo o protocolo. A Stripe verifica a assinatura sobre o corpo original; transformar JSON antes pode invalidar a verificação.
  • Registe duradouramente o evento ou processamento antes da confirmação adequada. Distinga ID de entrega, ID de evento e chave de idempotência da ação.
  • Teste duplicados, desordem, interrupção e reinício do worker. Consulte o estado oficial do objeto quando um evento antigo não permita decidir com segurança.

Organizar recuperação e reconciliação

Documente tentativas, prazos, eventos pendentes e reconciliação com o fornecedor. Uma confirmação rápida pode ocultar falha posterior. Acompanhe também a ação final e limite segredos e dados pessoais nos registos.

Fontes primárias

Lidar com webhooks repetidos de forma segura.

Uma notificação pode ser repetida após um tempo limite ou perda de resposta. A confiabilidade depende da verificação da origem, de um identificador de evento e do processamento que separa uma nova mensagem de uma duplicata.

  • Verificar cada solicitação usando o mecanismo do provedor.
  • Testar novas tentativas, duplicatas e alteração da ordem de chegada.
  • Confirmar consistentemente após o processamento ou enfileiramento persistente.

Fonte primária: IETF RFC 9457 — Problem Details for HTTP APIs. Método relacionado: consultar o guia prático.