Webhooks ou polling: como desenhar integrações fiáveis
Ser avisado ou perguntar de tempos a tempos: cada abordagem tem o seu lugar. A fiabilidade depende mais da forma como a implementa do que da que escolhe.
Quando dois sistemas têm de saber o que se passa no outro (um pagamento confirmado, uma encomenda enviada, uma alteração de stock) há duas formas de o fazer.
Webhooks: ser avisado
O sistema de origem faz um pedido HTTP a uma URL sua quando algo acontece. É imediato e eficiente. É usado pelos gateways de pagamento (Stripe, Redsys com a sua notificação) e por muitas plataformas.
Polling: perguntar de tempos a tempos
O seu sistema pergunta periodicamente «há algo novo desde a última vez?». Mais simples e mais robusto perante falhas, mas com atraso e mais carga.
Como tornar um webhook fiável
- Verifique a assinatura de cada notificação com o segredo partilhado. Nunca aceite um «pagamento confirmado» sem o verificar.
- Responda depressa (200) e processe depois. Se demorar, a origem volta a tentar e vai receber duplicados.
- Idempotência: guarde o identificador de cada evento e não o processe duas vezes.
- Não dependa só do webhook: um processo de conciliação periódico apanha o que se tenha perdido.
// Esquema de un receptor 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);
O melhor dos dois
Em integrações críticas usamos ambos: webhook para a rapidez e um polling de hora a hora que compara e corrige. Assim, se um aviso se perder, a diferença dura no máximo uma hora.