Webhook o polling: come progettare integrazioni affidabili
Farsi avvisare o chiedere spesso: ogni approccio ha il suo posto. L'affidabilità dipende più da come lo implementi che da quale scegli.
Quando due sistemi devono venire a sapere cosa succede nell'altro (un pagamento confermato, un ordine spedito, una variazione di stock) ci sono due modi per farlo.
Webhook: farsi avvisare
Il sistema di origine fa una richiesta HTTP a un tuo URL quando succede qualcosa. È immediato ed efficiente. Lo usano i gateway di pagamento (Stripe, Redsys con la sua notifica) e molte piattaforme.
Polling: chiedere spesso
Il tuo sistema chiede periodicamente «c'è qualcosa di nuovo dall'ultima volta?». Più semplice e più robusto in caso di interruzioni, ma con ritardo e più carico.
Come rendere affidabile un webhook
- Verifica la firma di ogni notifica con il segreto condiviso. Non accettare mai un «pagamento confermato» senza verificarlo.
- Rispondi subito (200) ed elabora dopo. Se ci metti troppo, l'origine ritenta e riceverai duplicati.
- Idempotenza: salva l'identificativo di ogni evento e non elaborarlo due volte.
- Non dipendere solo dal webhook: un processo di riconciliazione periodico recupera ciò che è andato perso.
// Schema di un ricevitore idempotente
$evento = verificarFirma(file_get_contents('php://input'), $cabecera, $secreto);
if (yaProcesado($evento['id'])) {
http_response_code(200);
exit;
}
encolar($evento);
marcarProcesado($evento['id']);
http_response_code(200);
Il meglio dei due
Nelle integrazioni critiche usiamo entrambi: webhook per l'immediatezza e un polling ogni ora che confronta e corregge. Così, se un avviso va perso, la differenza dura al massimo un'ora.