Webhooks: automatización de eventos y su uso
Las aplicaciones que desarrollamos actualmente requieren comunicarse con distintos sistemas, ya sea para automatizar procesos o sincronizarse ante diversos tipos de eventos. Para lograr estas comunicaciones uno de los principales métodos son los webhooks. En este post te vamos a explicar qué son de una manera entendible, junto con algunas prácticas de uso que creemos te resultarán de utilidad.
¿Qué son los webhooks?
Antes de adentrarnos en cómo funcionan, necesitamos entender qué son exactamente los webhooks. En términos sencillos, un webhook es una forma de enviar datos de un sistema a otro cuando ocurre un evento específico en una aplicación. Es como si un servicio avisara a otro para decirle que algo importante ha pasado, de modo que el sistema avisado pueda realizar algún tipo de acción como consecuencia.
Imaginemos que tienes una tienda en línea y cada vez que alguien realiza un pedido, quieres enviar una notificación a tu sistema de gestión de envíos o control de stock. En este caso podemos usar un webhook para que la tienda notifique de forma automática al sistema de envíos o de stock. Por supuesto, la generación y recepción de los webhooks se debe realizar de manera automática para que tengan sentido y que no necesites realizar ninguna acción adicional manualmente.
¿Cómo funcionan los webhooks?
Ahora que tenemos en mente qué es un webhook, podemos detallar su funcionamiento en líneas generales en los siguientes puntos.
Flujo de trabajo de un webhook
El funcionamiento de un webhook se basa en un flujo de eventos y comunicaciones. En él participan dos sistemas.
- Emisor del Webhook: es la aplicación que origina el webhook cuando ocurre un evento determinado.
- Receptor del Webhook: es la aplicación que recibe la señal originada por el webhook y con los datos recibidos debe realizar acciones en consecuencia.
En el sistema emisor se debe configurar el tipo de evento para el que se debe generar el webhook y la URL del sistema receptor a la que se debe enviar los datos.
En el sistema receptor debemos programar un comportamiento personalizado cada vez que se reciben los datos en la URL donde se espera recibir la notificación.
Eventos que pueden activar un webhook
Los eventos que pueden activar un webhook son variados y dependen de la aplicación emisora. Dependiendo del modelo de negocio que implemente tendrá algunos tipos de eventos que puedan ser interesantes para otros.
Por ejemplo, un sistema de pagos electrónicos podría tener un webhook cuando se ha aceptado un pago y otro webhook cuando el pago se ha rechazado.
Protocolo HTTP en webhooks
Los webhooks utilizan el protocolo HTTP para enviar los datos desde un sistema al otro. Esto es así porque es un protocolo totalmente extendido y compatible con la mayoría de sistemas y redes informáticas, incluida Internet.
Gracias a HTTP se puede beneficiar de los procedimientos comunes, como el envío de POST en las solicitudes, con los que se puede enviar la información al receptor.
Diferencias entre webhooks y API
Es posible comparar los webhooks con las API, ya que ambas son herramientas para integrar sistemas. Sin embargo, existen algunas diferencias importantes que vamos a analizar a continuación.
Método de comunicación: Push (Webhooks) vs Pull (API)
La principal diferencia entre los webhooks y las API es cómo se origina la comunicación entre los sistemas. Los webhooks emplean un método de «push», es decir, se empujan los datos al sistema receptor tan pronto como ocurre un evento. Dicho de otro modo, es el webhook del sistema emisor el que elige cuándo y cómo necesita comunicar con el receptor.
Por otra parte, en el esquema de trabajo habitual de las API, se trabaja con un método «pull», donde el sistema receptor es el que debe originar la solicitud para obtener la información cuando lo necesite.
Frecuencia de actualización: eventos en tiempo real vs consultas periódicas
El enfoque push hace también que los webhooks sean ideales para situaciones en las que se necesita recibir información en tiempo real, ya que están preparados para enviar datos inmediatamente después de que se produce un evento.
En cambio, las API requieren que el sistema receptor consulte (haga pull) periódicamente para comprobar si hay cambios. Esta situación no es tan eficiente porque requiere hacer muchas consultas cuando es posible que en la mayoría no haya ningún cambio. En el caso de optar por una estrategia de realización de pocas consultas, para no sobrecargar los sistemas, puede ocurrir que la información no se encuentre sincronizada en todo momento.
Consumo de recursos: eficiencia de webhooks frente a API
Como hemos dicho en el punto anterior, en enfoque pull suele ser menos eficiente, porque consume más recursos que los necesarios, por el hecho de tener que estar preguntando constantemente si hay o no cambios.
Casos de uso específicos para Webhooks y API
Hay casos de uso donde los webhooks son más apropiados, así como casos de uso donde las API son el mecanismo más adecuado para implementar las comunicaciones.
Por ejemplo, en un comercio electrónico podríamos usar webhooks para comunicar cambios en el stock con un sistema de ERP, mientras que en ese mismo comercio electrónico podría usar un API para enviar email transaccional a los clientes cuando han realizado sus compras.
Beneficios de usar webhooks para automatización
Ahora vamos a ver cuáles son los beneficios de usar webhooks para automatizar eventos entre aplicaciones, aunque ya los hemos dejado entrever en los puntos anteriores.
Ahorro de tiempo y recursos mediante automatización en tiempo real
Uno de los principales beneficios de los webhooks es su capacidad para automatizar procesos en tiempo real. Cuando un evento ocurre, el webhook lo comunica inmediatamente, lo que permite ahorrar tiempo y recursos en las comunicaciones entre sistemas.
Además, la automatización de los procesos de comunicación entre sistemas, como el de avisos de envíos o el de facturación facilita una mayor eficiencia operativa y reduce recursos empleados.
Reducción de la necesidad de consultas periódicas (polling)
Como hemos dicho, los webhooks no necesitan hacer consultas constantes para verificar si algo ha cambiado, lo que reduce significativamente la carga sobre los servidores involucrados.
Mejor sincronización entre sistemas y aplicaciones
Gracias a las sincronizaciones en tiempo real los webhooks suelen funcionar de manera más fluida, además que garantiza que la información esté siempre actualizada. Esto resulta especialmente importante si trabajas con aplicaciones que necesitan compartir datos constantemente y de manera fiable.
Casos de uso comunes para webhooks
Ahora que ya conocemos cómo funcionan los webhooks y sus beneficios, veamos algunos de los casos de uso más comunes, mediante los cuales podemos tener una idea más precisa de su utilidad.
Notificaciones en aplicaciones SaaS (Software como Servicio)
Uno de los usos más comunes de los webhooks se da en el envío de notificaciones en aplicaciones SaaS. Por ejemplo, cada vez que un usuario realiza una acción importante, como suscribirse a un plan o actualizar sus preferencias, un webhook puede notificar automáticamente a otros servicios, lo que permite actualizar la información en tiempo real.
Automatización de flujos de trabajo en eCommerce
En el comercio electrónico los webhooks son necesarios para automatizar procesos clave, como el control de stock o la gestión de envíos. Pero también se pueden usar para controlar eventos de pagos. Por ejemplo, sitios que aceptan suscripciones necesitan saber cuándo un pago recurrente no ha podido procesarse, quizás porque la tarjeta ha caducado, de modo que puedan notificar al usuario suscriptor y solicitarle que indique otro medio de pago.
Sincronización de bases de datos y sistemas CRM
Otro caso de uso común es la sincronización de bases de datos y sistemas CRM. Cuando en un sitio web se actualiza la información de un cliente, los webhooks pueden asegurarse de que todos los sistemas relacionados, como el CRM, se mantengan actualizados en tiempo real.
Cómo implementar webhooks en tu proyecto
Si te estás preguntando cómo podrías empezar a utilizar webhooks en tus propios proyectos, vamos a explicarte los pasos básicos de un modo general, aunque la implementación dependerá mucho de los lenguajes y frameworks, o las aplicaciones en cuestión que necesitemos conectar.
Crear y configurar un Webhook en tu aplicación
Para poder implementar el webhook necesitamos realizar programación del lado de las dos aplicaciones involucradas.
El emisor del webhook
En el emisor tendremos que configurar un sistema para generación de eventos del lado del servidor cuando ocurran ciertas cosa que sean susceptibles de necesitar una comunicación. Si usamos un framework como Laravel ya tenemos implementado un sistema de eventos del lado del servidor, pero si no fuese así tendríamos que desarrollarlo por nosotros mismos. Si no estás familiarizado con estos mecanismos te recomendamos que estudies el patrón de diseño Observer, ya que propone un esquema de clases para producir eventos.
En todo caso, cuando se produzcan los eventos en el emisor tendremos que generar al vuelo una solicitud contra una URL. Esa solicitud generalmente la tendrás que gestionar con alguna librería de las que disponga tu lenguaje de backend. Por ejemplo en PHP existe de manera nativa una integración con cURL que podrías usar perfectamente.
Un esquema posible de código podría ser el siguiente:
$url = 'https://ap.example.com/data'; // Inicializar cURL $ch = curl_init($url); // Configurar opciones curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Para recibir la respuesta curl_setopt($ch, CURLOPT_HTTPGET, true); // Establecer método GET // Ejecutar la solicitud $response = curl_exec($ch); // Comprobar si hubo error if ($response === false) { echo 'Error: ' . curl_error($ch); } else { echo 'Respuesta: ' . $response; } // Cerrar la sesión cURL curl_close($ch);
Si lo deseas, existen en PHP otras librerías como Guzzle que nos permiten gestionar las solicitudes a un nivel más alto. Revisa las que tu lenguaje de programación de backend te proporcione.
En el sistema receptor del webhook
En el sistema receptor tendrás que configurar la URL de destino de la solicitud del webhook. La programación sería la misma que usas habitualmente para recibir los datos de un formulario común por POST, ya que estaremos usando el propio protocolo HTTP de toda la vida.
Recomendaciones para recibir y procesar webhooks
Es fundamental que la URL de tu webhook esté preparada para recibir y procesar correctamente los datos enviados y hacer las operativas que sean necesarias.
En ese procesamiento tendrías que verificar que los datos recibidos sean válidos y en caso positivo guardar la información en el sistema. Ya cuando se produzcan errores es importante responder de manera que el emisor del webhook sea capaz de entender que no se pudo procesar, para que se vuelva a generar la solicitud pasado un tiempo, se informe en un sistema de log o incluso que se manden notificaciones a los administradores del sitio, explicando que a ciertas horas no ha sido posible realizar la sincronización de los datos.
Mejoras en la seguridad de los webhooks: autenticación y verificación
En el trasiego de la información se pueden aplicar algunas precauciones para mejorar la seguridad de los webhooks. Primero deberías asegurarte que el tráfico se base siempre en HTTPS, para garantizar que los datos viajan encriptados de una aplicación a otra.
En muchas ocasiones también será necesario hacer algún tipo de autenticación en la URL de destino, por ejemplo enviando un token secreto que verifique que la solicitud se ha generado en el servidor que toca.
Mejores prácticas para el uso de webhooks
Ya para acabar queremos abordar algunas de las mejores prácticas para garantizar que los webhooks se utilicen de la forma adecuada.
Gestión de errores y reintentos en Webhooks fallidos
Debes establecer unos mecanismos y políticas para gestionar los errores en la comunicación de los webhooks. Lo típico es programar una serie de intentos si el envío ha fallado. Si no ha funcionado correctamente después de esos intentos se puede generar algún tipo de notificación extra a los administradores de la aplicación.
Además, para poder saber cuándo se ha producido un error es ideal basarse en los códigos de status de las respuestas del emisor del webhook. Existen unos statuts típicos como el 200 para cuando todo ha funcionado bien o el 422 cuando la solicitud no estaba correctamente formulada.
Control y limitación de tasa (rate limiting) para evitar sobrecarga
Otro aspecto que puedes controlar para evitar una sobrecarga en tu servidor consiste en una limitación de tasa (rate limiting) para los webhooks. Esto ayuda a controlar el número de solicitudes que pueden enviarse en un período de tiempo determinado. Es ideal poder establecer esos parámetros para proteger al sistema receptor ante posibles ataques.
Documentación clara y pruebas exhaustivas de webhooks
Debes documentar correctamente los webhooks, especialmente cuando estás realizando un sistema que es capaz de emitirlos, para ser escuchados en aplicaciones de terceros. Los terceros necesitarán saber detalladamente cómo son los datos que el webhook va a enviar, y los tipos de respuesta que espera recibir.