Webhook: ricevere eventi senza duplicare le azioni

In sintesi

Un webhook notifica un evento via HTTP. Non garantisce universalmente consegna immediata, ordine o effetti applicativi eseguiti una sola volta.

Corridoio sicuro di server e reti senza personale Illustrazione · scena fittizia
In questo articolo

Separare ricezione e lavorazione completata

Le garanzie dipendono dal fornitore. Stripe documenta duplicati possibili e ordine non garantito. Una risposta HTTP di successo deve corrispondere a ricezione duratura o lavorazione prevista, non solo all’arrivo in memoria.

SituazioneComportamento attesoProva utile
Stesso evento ricevuto due volteEvitare il doppio effetto applicativo.ID lavorato e risultato persistente.
Evento vecchio arriva dopoNon sovrascrivere ciecamente uno stato recente.Stato autorevole e regola di transizione.
Lavorazione pesanteRicezione duratura e lavoro differito.Stato della coda e risultato del worker.
Consegna mancanteRiconciliare e recuperare secondo il fornitore.Divario individuato e correzione verificata.

Costruire una ricezione verificabile

  • Verificate HTTPS, firma e protezione dal replay secondo il protocollo. Stripe verifica la firma sul corpo grezzo; trasformare prima JSON può invalidare la verifica.
  • Registrate durevolmente evento o lavorazione prima della conferma appropriata. Distinguete ID consegna, ID evento e chiave di idempotenza dell’azione.
  • Testate duplicati, disordine, interruzione e riavvio del worker. Consultate lo stato autorevole dell’oggetto se un evento vecchio non permette una decisione sicura.

Organizzare recupero e riconciliazione

Documentate tentativi, tempi, eventi non lavorati e riconciliazione col fornitore. Una conferma rapida può nascondere un errore successivo. Monitorate anche l’azione finale e limitate segreti e dati personali nei registri.

Fonti primarie

Gestire in modo sicuro i webhook ripetuti.

Una notifica può essere ripetuta dopo un timeout o una risposta persa. L'affidabilità dipende dalla verifica dell'origine, da un identificatore di evento e da un'elaborazione che separa un nuovo messaggio da un duplicato.

  • Verificare ogni richiesta utilizzando il meccanismo del provider.
  • Testare i tentativi, i duplicati e l'ordine di arrivo modificato.
  • Confermare in modo coerente dopo l'elaborazione o la messa in coda persistente.

Fonte primaria: IETF RFC 9457 — Problem Details for HTTP APIs. Metodo correlato: consultare la guida pratica.