A confirmação de recebimento é apenas uma fronteira
Um 2xx pode significar accepted, queued ou fully processed. Defina quando o evento se torna durable e o que ocorre se processing falhar depois do acknowledgement.
Os consumidores precisam de processamento idempotente
Pressuponha entregas duplicadas e use IDs de evento estáveis ou chaves comerciais persistentes. Um conjunto em memória não sobrevive a reinicializações.
A ordem dos eventos precisa ser explícita
Os eventos distribuídos podem chegar tarde ou fora de ordem. Use versões, carimbos de data e hora, transições de estado ou consultas de conciliação, em vez de presumir que a ordem na rede é a ordem comercial.
A recuperação precisa de outra fonte de referência
A conciliação periódica, as APIs de consulta do provedor, os repositórios com reprodução ou os endpoints de preenchimento retroativo permitem reconstruir o estado quando os eventos se perdem.
Defina entrega, aceitação e processamento como eventos diferentes
O provedor enviar um webhook, a camada de borda recebê-lo, a aplicação aceitá-lo e a transação de domínio ser confirmada são eventos distintos. O sistema deve saber qual limite o 2xx reconhece. Se responder com sucesso antes da persistência durável, uma falha pode fazer o evento se perder depois que o provedor já parou de tentar novamente. Se esperar um fluxo de trabalho longo, as tentativas podem criar duplicatas desnecessárias.
Um padrão comum é autenticar e validar, persistir ou enqueue durable, responder rápido e processar domain a partir desse registro. A implementação varia, mas o boundary deve ser intencional e observável.
Autentique os eventos sem tornar a entrega frágil
A segurança de webhook normalmente inclui a verificação de assinatura/segredo, carimbo de data e hora e segurança de transporte. Se o provedor exigir o conteúdo original ou uma forma canônica, use-a, pois analisar e serializar novamente o JSON pode invalidar as assinaturas. A rotação de chaves e a diferença entre relógios também exigem operação adequada.
Falhas de segurança devem ser métricas separadas das falhas da aplicação. Um aumento nas falhas de assinatura pode indicar configuração incorreta, problema de rotação ou tráfego malicioso; ocultá-lo em um 4xx genérico esconde a causa.
Projete a idempotência no limite do domínio
Deduplicar pelo ID do evento evita repetir efeitos colaterais da mesma entrega, mas pode não proteger contra eventos semanticamente duplicados com IDs distintos. Quando a ação de negócio importa — marcar uma fatura como paga ou criar um reembolso — use também restrições de domínio e transições de estado.
O processamento idempotente deve incluir e-mails, lançamentos contábeis, alterações de estoque e mensagens subsequentes. Um manipulador que atualiza o banco de dados uma vez, mas envia duas notificações, não é idempotente na prática.
Gerencie a ordem dos eventos com uma máquina de estados
As redes não garantem a ordem dos eventos. Um estado posterior pode chegar primeiro, ou um evento antigo pode ser reenviado depois de um novo. Os consumidores devem validar se a transição ainda é válida usando a versão do recurso, carimbos de data e hora, dados de sequência ou uma nova consulta ao provedor, quando necessário.
O objetivo não é ordenar tudo globalmente. É impedir que o domínio regrida para um estado impossível. Máquinas de estado de pagamento devem tolerar evidências repetidas e atrasadas sem corromper o resultado final.
Incorpore reprocessamento e conciliação desde o primeiro dia
Parta do princípio de que alguns eventos serão perdidos por erros de implantação, credenciais expiradas, erros de configuração ou incidentes do provedor. Guarde históricos ou referências suficientes para permitir uma repetição segura. Concilie periodicamente recursos importantes com o provedor para identificar lacunas silenciosas.
Isso muda a resposta a incidentes: em vez de perguntar se cada webhook chegou, pergunte se é possível comprovar a exatidão do estado financeiro local e qual grupo precisa de repetição ou conciliação. Esse é um objetivo de confiabilidade mais robusto.
Defina a garantia real do acknowledgement.
Processe idempotentemente.
Não presuma a ordem de chegada.
Mantenha um caminho de recuperação independente.