Che cosa sono i webhook?

Aggiornato: ottobre 2026

Un webhook è un callback HTTP automatico: quando si verifica un evento, un sistema invia in POST un payload a un URL registrato da un altro sistema. Il termine – coniato nel 2007 come “user-defined HTTP callbacks” – dà il nome all’inversione che conta: invece di chiedere di continuo se qualcosa è cambiato, è l’altro sistema ad avvertire nell’istante in cui accade. È push costruito con i pezzi più banali del web: un URL HTTPS, un POST, un corpo JSON e una conferma 2xx.

Punti chiave

DomandaRisposta
Il meccanismoRegistrare un URL → l’evento scatta → il provider invia il payload in POST → si restituisce 2xx
vs. un’APILe API rispondono quando interrogate; i webhook parlano quando qualcosa accade
L’asticella della sicurezzaHMAC sul corpo grezzo, confronto in tempo costante, finestra di timestamp
La verità sulla consegnaAt-least-once, senza ordine, con retry – deduplicare e riconciliare
Il mantra di chi riceveVerificare · confermare in fretta · elaborare in async · deduplicare per ID evento

La consegna, da un capo all’altro

CONFIG    il ricevente espone  https://api.example.com/hooks/payments
          e lo registra presso il provider, scegliendo eventi + un segreto

EVENTO    un pagamento va a buon fine presso il provider

CONSEGNA  POST /hooks/payments
          webhook-id: evt_8fk2            ← chiave di deduplicazione
          webhook-timestamp: 1767024900   ← guardia anti-replay (dentro la firma)
          webhook-signature: v1,d2Vio…    ← HMAC-SHA256(secret, id.timestamp.body)
          { "type": "charge.succeeded", "orderId": "o-1187" }

ACK       il ricevente verifica la firma → 200 in pochi secondi → il lavoro va in async
RETRY     nessun 2xx? backoff esponenziale per ore/giorni → i duplicati sono NORMALI

Entrambe le direzioni del pattern in codice – un trigger sui dati come mittente, una Cloud Function come ricevente e il client che si limita a osservare il risultato:

// JavaScript — Cloud Code (cloud/main.js): both directions of a webhook
// OUTGOING: any data change can notify an external system
Parse.Cloud.afterSave('Order', async (req) => {
  if (req.object.get('status') !== 'paid') return;
  await Parse.Cloud.httpRequest({
    method: 'POST',
    url: 'https://hooks.example.com/orders', // the receiver's registered URL
    headers: { 'Content-Type': 'application/json' },
    body: { event: 'order.paid', id: req.object.id },
  });
});

// INCOMING: a Cloud Function is a ready-made webhook receiver
Parse.Cloud.define('paymentWebhook', async (req) => {
  verifySignature(req.params, process.env.WEBHOOK_SECRET); // HMAC first
  await markOrderPaid(req.params.orderId); // write fast, work async
  return { received: true }; // 2xx before heavy processing
});

Webhook vs. API vs. polling

CriterionWebhookChiamata APIPolling
IniziativaSpinge il providerChiede chi consumaChiede chi consuma, a intervalli fissi
TempisticaAll’eventoSu richiestaAl prossimo intervallo
Traffico sprecatoNessuno a riposoNessuno~98 % dei poll non trova nulla
DirezioneNotifica a senso unicoRichiesta/risposta bidirezionaleBidirezionale, ripetuta
Punto di forza”Avvisami quando""Fai questo / dammi quello”Riconciliazione, provider senza webhook

Il dibattito è in gran parte falso: le integrazioni mature usano tutti e tre – i webhook per sapere in fretta dei cambiamenti, le chiamate API per leggere lo stato che fa fede e agire, e un poll lento di riconciliazione come rete sotto il trapezio.

La checklist di chi riceve

L’elenco che la documentazione di ogni provider sparpaglia e che nessuna spiegazione mette insieme:

  1. Verificare l’HMAC sul corpo grezzo – prima del parsing; il JSON riserializzato rompe le firme.
  2. Confrontare in tempo costante – l’uguaglianza fra stringhe lascia filtrare informazioni dai tempi; conviene usare il comparatore della propria libreria di crittografia.
  3. Applicare la finestra di timestamp – rifiutare le consegne più vecchie di ~5 minuti; poiché il timestamp sta dentro il contenuto firmato, un attaccante non può rigiocare una vecchia richiesta validamente firmata con un orologio fresco.
  4. Restituire 2xx in fretta – entro pochi secondi, prima del lavoro pesante; gli handler lenti finiscono in timeout e vengono ritentati fino a diventare tempeste di duplicati.
  5. Elaborare in modo asincrono – accodare, confermare, poi lavorare.
  6. Deduplicare per ID dell’evento – con una memoria almeno lunga quanto la finestra di retry del provider.
  7. Non fidarsi del payload per le azioni critiche – il webhook va trattato come un campanello: lo stato corrente si rilegge dall’API del provider prima di spedire merce o concedere un accesso.
  8. Registrare le consegne e allertare sui fallimenti – il silenzio è indistinguibile da un endpoint rotto.

Una nota sullo sviluppo locale che le pagine definitorie saltano: localhost è irraggiungibile da internet, quindi lo sviluppo passa da uno strumento di tunneling che presta alla macchina un URL pubblico, più uno strumento di capture per rigiocare payload reali.

Semantica della consegna, onestamente

La consegna dei webhook è at-least-once: il provider ritenta finché non riceve conferma, quindi i duplicati sono una caratteristica dell’affidabilità, non un difetto – la consegna exactly-once su una rete inaffidabile è formalmente impossibile, e l’equivalente pratico è at-least-once più un handler idempotente. L’ordine non è garantito: retry e invii paralleli si intrecciano, quindi updated può arrivare prima di created; gli eventi vanno applicati per ID e versione, oppure si rilegge lo stato. E le finestre di retry finiscono: un endpoint fuori servizio per un fine settimana può perdere eventi in modo definitivo, ed è per questo che le integrazioni critiche in cui girano soldi abbinano i webhook a una riconciliazione periodica – la stessa disciplina at-least-once che i broker formalizzano, recapitata su semplice HTTP. Il confronto si generalizza: un webhook è push punto a punto verso un URL noto; il pub/sub aggiunge un broker, i topic e il fan-out; WebSocket e SSE servono i client, non i server. I webhook sono la risposta precisamente quando due sistemi che non condividono infrastruttura devono sapere degli eventi l’uno dell’altro.

Consegna di un webhook con retry ed elaborazione asincronaUn evento presso il provider viene accodato e inviato in POST, con una firma HMAC, all'URL registrato dal ricevente. Il ricevente verifica la firma, conferma rapidamente con un 2xx ed elabora in modo asincrono con deduplicazione. Le consegne fallite rientrano nella coda di retry del provider con backoff esponenziale, e i fallimenti ripetuti finiscono in un registro dead-letter.

POST del payload

verifica → 2xx in fretta

nessun 2xx

esaurito

Si verifica un evento

Coda del provider
+ firma HMAC

Endpoint del ricevente

Worker asincrono
deduplica per ID evento

Retry con backoff
ore → giorni

Registro dead-letter
+ avviso

Il proprio database

Un evento presso il provider viene accodato e inviato in POST, con una firma HMAC, all'URL registrato dal ricevente. Il ricevente verifica la firma, conferma rapidamente con un 2xx ed elabora in modo asincrono con deduplicazione. Le consegne fallite rientrano nella coda di retry del provider con backoff esponenziale, e i fallimenti ripetuti finiscono in un registro dead-letter.

Costruire il lato di chi invia

Emettere webhook in modo affidabile è un piccolo sistema a sé, e nessuna pagina di classifica lo abbozza: una coda per destinazione, così che un endpoint morto non blocchi gli altri; retry con backoff esponenziale e jitter; un archivio dead-letter con strumenti di riconsegna quando i tentativi si esauriscono; firma HMAC con segreti per singolo endpoint e rotazione; sottoscrizioni per tipo di evento, così che chi riceve scelga ciò che vuole; e registri di consegna leggibili dai clienti, perché “è stato inviato?” è la prima domanda che arriva al supporto. Un punto di sicurezza tipico di chi invia: i riceventi registrano URL arbitrari, quindi vanno validati contro gli intervalli di indirizzi interni – un attaccante che registra http://10.0.0.5/admin come proprio “endpoint di webhook” è server-side request forgery travestita da funzionalità di integrazione.

Casi d’uso tipici

  • Cicli di vita dei pagamenti – addebiti, rimborsi e cambi di abbonamento annunciati al backend mentre si definiscono.
  • Trigger di CI/CD – il collegamento canonico del git push che avvia una build.
  • Automazione fra applicazioni – strumenti per i moduli, piattaforme di chat e CRM concatenati attraverso gli eventi gli uni degli altri.
  • Notifiche operative – avvisi di monitoring e aggiornamenti di spedizione che atterrano nei canali del team.
  • Sincronizzazione dei dati – mantenere aggiornato uno specchio locale di un sistema partner senza fare polling su tutta la sua API.

Conviene usare un webhook? Matrice decisionale

SituazioneScegliere
Il sistema di un’altra azienda deve notificare il proprioI webhook – lo standard dell’interoperabilità
Servizi propri, infrastruttura propriaIl pub/sub – con broker, buffer e fan-out
Browser e app hanno bisogno di aggiornamenti in direttaWebSocket / live query
Il provider non offre webhookIl polling, con garbo
Dall’evento dipendono soldi o accessiWebhook + verificare-poi-rileggere + riconciliazione
Si è la piattaforma che emette gli eventiCostruire il lato di chi invia descritto sopra – oppure non promettere affidabilità

Limiti e trade-off

  • Oltre la finestra di retry la consegna è best-effort. I webhook notificano; non garantiscono. I poll di riconciliazione coprono tutto ciò che non si può perdere.
  • Chi riceve eredita il dovere di uptime. La disponibilità del proprio endpoint vincola ormai gli eventi di qualcun altro – deployment, cold start e timeout diventano tutti bug di integrazione.
  • La sicurezza è opt-in. Un endpoint di webhook senza verifica è un’API di scrittura non autenticata; la checklist HMAC è la differenza fra integrazione e iniezione.
  • Il debug si estende su due aziende. Registri di consegna da entrambe le parti e strumenti di replay sono ciò che trasforma “non è arrivato” da braccio di ferro in un diff.
  • I payload derivano. I provider versionano gli schemi degli eventi; chi consuma si ancora a forme esatte e si rompe in silenzio – conviene fare parsing in modo difensivo e ignorare i campi sconosciuti.

I webhook su Back4app

Back4app è una piattaforma open-source di Backend as a Service (BaaS) che combina database gestito, API REST e GraphQL generate automaticamente, autenticazione, archiviazione di file e funzioni serverless con Cloud Code. Entrambe le metà del pattern distano un solo costrutto Cloud Code, come mostrano le schede di codice. In uscita: un trigger afterSave che osserva i dati chiama Parse.Cloud.httpRequest verso qualsiasi URL registrato – l’app diventa provider di webhook scrivendo la funzione, e le discipline del lato di chi invia (ritentare in caso di errore, registrare le consegne) vivono nello stesso file. In entrata: una Cloud Function esposta su HTTPS è un ricevente pronto all’uso – si verifica l’HMAC contro un segreto nella configurazione lato server, si scrive il risultato nel database, si risponde in fretta – e l’aggiornamento si propaga poi a ogni schermata aperta tramite le Live Queries, chiudendo il cerchio che va dall’evento di una piattaforma di pagamento alla ricevuta dell’utente senza un server da far girare in nessuno dei due passaggi.

Domande frequenti

Che cos'è un webhook in parole semplici?

Un messaggio HTTP automatico che un sistema invia a un altro nell'istante in cui qualcosa accade – un campanello invece di controllare la porta di continuo. Si fornisce un URL al provider; quando l'evento scatta, il provider vi invia in POST i dati dell'evento. Il termine risale al 2007: "user-defined HTTP callbacks".

Qual è la differenza tra un webhook e un'API?

Direzione e iniziativa. Un'API è guidata dalle richieste – il client chiede, il server risponde. Un webhook è guidato dagli eventi – il server spinge quando qualcosa accade, senza che nessuno lo chieda. Un webhook è in realtà un pattern costruito sopra le API, e la maggior parte delle integrazioni reali usa entrambi: webhook per sapere dei cambiamenti, chiamate API per agire di conseguenza.

Qual è la differenza tra webhook e polling?

Il polling chiede a intervalli fissi e sente soprattutto "ancora niente" – una misurazione su una grande piattaforma di automazione è diventata famosa per aver rilevato che circa il 98 % dei poll non restituisce dati nuovi. I webhook ribaltano la logica: zero richieste a riposo, consegna immediata al cambiamento. Il polling sopravvive come rete di riconciliazione sotto i webhook, non come loro rivale.

Come si riceve un webhook?

Esponendo un endpoint HTTPS che accetta POST, registrandone l'URL presso il provider e selezionando gli eventi desiderati. Nell'handler: verificare la firma, restituire un 2xx entro pochi secondi e fare l'elaborazione vera in modo asincrono. Conviene provare con uno strumento di capture prima di collegare la logica di produzione.

I webhook sono sicuri?

Non per impostazione predefinita – l'endpoint è un URL pubblico su cui chiunque può fare un POST. La difesa standard è una firma HMAC: il provider firma ogni payload con un segreto condiviso, e chi riceve ricalcola la firma sul corpo grezzo e la confronta in tempo costante, rifiutando i timestamp scaduti per bloccare i replay. HTTPS sempre; le liste di IP consentiti come guarnizione.

Che cosa succede se l'endpoint è fuori servizio?

I provider validi ritentano con backoff esponenziale, spesso per ore o giorni – ed è per questo che la consegna è at-least-once e i duplicati sono normali. Gli eventi possono comunque perdersi oltre la finestra di retry, quindi le integrazioni critiche si riconciliano con poll periodici dell'API invece di affidarsi ai soli webhook.

Come si gestiscono le consegne duplicate di un webhook?

Deduplicando sull'ID univoco dell'evento: si registrano gli ID già elaborati e si salta ciò che si ripete, conservando il registro almeno quanto la finestra di retry del provider. Consegna at-least-once più handler idempotente equivale, in pratica, a un'elaborazione exactly-once – la metà del contratto di affidabilità che spetta a chi riceve.

Qual è la differenza tra un webhook e un WebSocket?

Un webhook è una notifica HTTP stateless, a senso unico, da server a server; un WebSocket è una connessione persistente e bidirezionale, pensata per il tempo reale lato client come chat e dashboard in diretta. Un server avverte un server: webhook. Un server trasmette verso interfacce utente: WebSocket.

Termini correlati

Confronta con

Fonti di approfondimento

Pronto a costruire il tuo backend?

Avvia il tuo progetto su Back4app in pochi minuti: database, autenticazione, API e Cloud Code inclusi. Nessuna carta di credito richiesta.

Scritto e revisionato da Back4app Engineering, Back4app Engineering · Pubblicato il 2026-10-05