# Webhook

> Una forma de que un servicio llame a tu app en el momento en que pasa algo.

- Nivel: Intermedio
- Temas: Software
- URL: https://tidbit.legios.com.ar/es/webhook/
- En inglés: [Webhook](https://tidbit.legios.com.ar/webhook/)

Un **webhook** es un mensaje que un sistema le manda a otro de forma automática cuando ocurre un evento. Le das a un servicio una URL tuya y, cuando pasa algo (se aprueba un pago, alguien pushea código a GitHub, se envía un formulario), el servicio hace un pedido HTTP `POST` a esa URL con los detalles, casi siempre en JSON.

Es una llamada a una API pero en el sentido contrario. Con una API normal, tu app pregunta: "¿hay pagos nuevos?". Para enterarse rápido tendría que preguntar cada pocos segundos, algo que se llama **polling** y gasta esfuerzo cuando la respuesta casi siempre es "no". Con un webhook, tu app dice una sola vez: "llamame acá cuando pase", y después solo escucha.

Como cualquiera en internet podría mandar un pedido a esa URL, los webhooks bien hechos vienen **firmados**: el que envía agrega un código calculado con un secreto compartido, y tu app lo verifica antes de confiar en el mensaje. Además, si tu app no responde, el que envía reintenta, así que el mismo evento puede llegar dos veces y un buen receptor está preparado para ignorar duplicados. Herramientas como Zapier se apoyan en gran parte en webhooks para conectar los eventos de un servicio con las acciones de otro.

## Una analogía

El polling es llamar al restaurante cada cinco minutos para preguntar si ya está tu mesa. Un webhook es dejar tu número para que te manden un mensaje cuando esté.

## Para quedarse

- El servicio te llama cuando pasa algo; no tenés que preguntar.
- Es simplemente un HTTP POST a una URL que registraste.
- Verificá la firma, porque cualquiera puede mandar pedidos a una URL pública.
- Los eventos pueden llegar dos veces o tarde, así que manejá duplicados.

## Para seguir leyendo

- [Acerca de los webhooks (documentación de GitHub)](https://docs.github.com/es/webhooks/about-webhooks)
- [Webhook en Wikipedia](https://es.wikipedia.org/wiki/Webhook)

## Términos relacionados

- [URL](https://tidbit.legios.com.ar/es/url/): La dirección completa de algo en la web: protocolo, sitio y ruta.
- [GitHub](https://tidbit.legios.com.ar/es/github/): Un sitio donde los equipos guardan su código con Git y trabajan juntos en él.
- [HTTP](https://tidbit.legios.com.ar/es/http/): El idioma de pedido y respuesta que hablan los navegadores y los sitios web.
- [JSON](https://tidbit.legios.com.ar/es/json/): El formato de texto con el que los programas se pasan datos estructurados.
- [API](https://tidbit.legios.com.ar/es/api/): El menú de cosas que un programa le deja pedir a otro programa.
- [Internet](https://tidbit.legios.com.ar/es/internet/): Una red mundial de redes que conecta cualquier aparato con cualquier otro.
