Chuck's Academy

Express JS

Implementación de Webhooks en Express

Los webhooks son una herramienta poderosa que permite a una aplicación recibir notificaciones de eventos en tiempo real de otros servicios. Son muy útiles para integrar aplicaciones de terceros y automatizar procesos. En este capítulo, aprenderemos cómo implementar webhooks en Express, cómo gestionar eventos entrantes y cómo asegurar las solicitudes para evitar abusos.

¿Qué es un Webhook?

Un webhook es un mecanismo que permite a un servicio enviar notificaciones o datos a otro sistema en respuesta a eventos específicos. A diferencia de las APIs tradicionales, donde el cliente realiza una solicitud, en los webhooks es el servidor el que envía la solicitud HTTP a un endpoint de tu aplicación cuando ocurre un evento.

Ejemplos Comunes de Webhooks

  • GitHub: Envío de notificaciones cuando se realiza un commit o pull request en un repositorio.
  • Stripe: Notificaciones de pagos exitosos o fallidos.
  • Slack: Envío de mensajes a un canal o eventos de usuarios.

Creación de un Webhook en Express

Para recibir webhooks en nuestra aplicación Express, necesitamos crear un endpoint que pueda procesar las solicitudes HTTP entrantes. Los webhooks generalmente envían datos en formato JSON a través de solicitudes POST.

Ejemplo de Configuración de Webhook

Creamos un endpoint en Express que recibirá un webhook de ejemplo:

javascript
"En este ejemplo, configuramos un webhook en la ruta slash webhook. La aplicación Express procesa los datos enviados en el cuerpo de la solicitud y responde con un código de estado doscientos indicando que el evento fue recibido correctamente."

Validación de Webhooks

Para asegurarnos de que las solicitudes que recibe el webhook son auténticas y provienen de fuentes confiables, es importante validar los webhooks. La mayoría de los servicios utilizan firmas o tokens en las solicitudes para autenticar su origen.

Validación de Firma con Cabecera

Supongamos que el servicio que nos envía webhooks añade una firma en el encabezado x-webhook-signature. Podemos validar la firma comparándola con una generada localmente usando un secreto compartido.

javascript
"Aquí validamos la firma del webhook utilizando la cabecera x webhook signature. Generamos una firma localmente usando HMAC con SHA256 y la comparamos con la firma proporcionada por el servicio de webhook. Si las firmas coinciden, el evento se procesa."

Gestión de Eventos Webhook

Al recibir un webhook, normalmente necesitamos procesar el evento de manera diferente según el tipo de evento. Por ejemplo, un servicio como Stripe puede enviar distintos tipos de eventos, como un pago exitoso o un reembolso. Podemos manejar estos eventos de manera individual.

Ejemplo de Manejo de Eventos

javascript
"Aquí procesamos diferentes tipos de eventos webhook, como payment successful o payment failed, usando una estructura switch. Dependiendo del tipo de evento, realizamos una acción diferente."

Seguridad en Webhooks

Es fundamental proteger nuestros webhooks para evitar ataques maliciosos. A continuación, algunas estrategias para mejorar la seguridad de nuestros webhooks:

  1. Verificación de la Firma: Como vimos anteriormente, validar la firma del webhook es una de las mejores maneras de asegurarse de que el evento es legítimo.
  2. HTTPS: Siempre utiliza HTTPS para asegurar que la información del webhook esté cifrada y no pueda ser interceptada.
  3. Tokens y Autenticación: Algunos servicios permiten que los webhooks incluyan un token de autenticación en la URL o en los encabezados de la solicitud. Valida ese token en cada solicitud.

Pruebas de Webhooks

Para probar webhooks localmente durante el desarrollo, podemos usar herramientas como ngrok, que crea un túnel a nuestro servidor local y permite que servicios externos envíen webhooks a nuestra máquina de desarrollo.

Uso de Ngrok para Pruebas de Webhooks

Primero, instalamos ngrok y lo ejecutamos en el puerto de nuestra aplicación local:

bash

Esto genera una URL pública, como https://random-url.ngrok.io, que podemos usar para probar los webhooks.

"Usamos ngrok para exponer nuestra aplicación local a través de una URL pública, permitiendo que los servicios externos envíen webhooks a nuestra máquina de desarrollo para probar su funcionalidad."

Casos de Uso Comunes de Webhooks

Algunos casos comunes de uso de webhooks incluyen:

  • Pagos: Servicios de pago como Stripe o PayPal envían webhooks para notificar sobre transacciones exitosas, fallidas o reembolsos.
  • Automatización de Tareas: Webhooks pueden ser usados para automatizar procesos en sistemas externos cuando ocurren ciertos eventos, como la creación de una cuenta o una actualización de datos.
  • Notificaciones: Plataformas como Slack usan webhooks para recibir notificaciones de eventos en tiempo real y ejecutarlos en diferentes canales.

Buenas Prácticas para Webhooks

  1. Registrar los Webhooks: Es importante registrar cada webhook recibido, incluyendo su contenido y hora de llegada, para facilitar el diagnóstico en caso de errores.
  2. Reintentos: Algunos servicios volverán a enviar webhooks si no reciben una respuesta exitosa. Implementa lógica para manejar solicitudes duplicadas.
  3. Responder Rápidamente: Los webhooks deben procesarse rápidamente. Si el procesamiento del evento toma mucho tiempo, responde con un código 200 de inmediato y maneja el evento de forma asíncrona.

Conclusión

En este capítulo, hemos aprendido qué son los webhooks y cómo implementarlos en Express, desde la creación de un endpoint hasta la validación y el manejo de eventos entrantes. Los webhooks son una herramienta poderosa para la integración entre sistemas, y con las prácticas correctas, podemos asegurarnos de que funcionen de manera segura y eficiente en nuestras aplicaciones.


Apoya a Chuck's Academy!

¿Disfrutando de este curso? Puse mucho esfuerzo en hacer la educación en programación gratuita y accesible. Si encontraste esto útil, considera comprarme un café para apoyar futuras lecciones. ¡Cada contribución ayuda a mantener esta academia en funcionamiento! ☕🚀

Buy Me A Coffee

Chatea con Chuck

Cargando...
Chatea con Chuck AI