Un webhook es un mecanismo por el cual, cuando se produce un evento concreto en un servicio, se envía automáticamente una solicitud HTTP (normalmente POST) a una URL registrada previamente. Es como dejar un número de teléfono diciendo "avísame si pasa algo": permite la integración entre servicios basada en eventos.
El concepto opuesto al webhook es el polling. Con polling, el cliente pregunta periódicamente "¿hay novedades?", lo que genera tráfico incluso cuando no hay cambios. Con un webhook, la notificación solo se envía cuando ocurre un evento, lo que ofrece mayor inmediatez y menor carga en el servidor.
Un ejemplo de uso de webhooks en servicios de URL cortas es recibir una notificación en tiempo real cada vez que se hace clic en un enlace. Por ejemplo, se puede enviar un aviso instantáneo a un canal de Slack cuando alguien hace clic en un enlace de campaña importante, o acumular automáticamente los datos de clics en una base de datos propia.
Hay varios aspectos a tener en cuenta al implementar webhooks. Primero, el endpoint receptor debe estar expuesto mediante HTTPS. Segundo, es necesario contemplar la lógica de reintentos en caso de que el envío falle. La mayoría de los servicios reintenta varias veces con backoff exponencial, pero los eventos que se produzcan mientras el receptor está caído pueden perderse. Tercero, es fundamental verificar el origen del webhook comprobando la firma (por ejemplo, HMAC-SHA256) para evitar solicitudes falsificadas.
Los webhooks son la base de la integración en servicios web modernos: GitHub (notificaciones de push), Stripe (confirmación de pagos), Slack (publicación de mensajes), etc. Herramientas de automatización como Zapier o IFTTT también se apoyan internamente en webhooks. Los libros sobre webhooks, API e integración en Amazon ofrecen guías prácticas.