Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=7b4a6eed-ec4b-4c42-aadd-02a9e54e040e

Qué son los Webhooks, en qué se diferencian de una API REST y por qué deberías conocerlos

Imagen ornamental

Desde hace muchos años, es casi impensable desarrollar una aplicación seria que no tenga necesidad de conectarse y comunicarse con otras aplicaciones. Especialmente si se trata de una aplicación Web.

A lo largo de las últimas décadas se han desarrollado diversas especificaciones para facilitar esa comunicación. Por ejemplo, a principios de siglo, lo más de lo más era SOAP (Simple Object Access Protocol), un protocolo de llamadas remotas basado en XML. Y desde hace ya años, lo más utilizado son las APIs Web REST, aunque han surgido otras iniciativas como OData para manejo de datos o, más recientemente, GraphQL.

Otra opción de la que seguro habrás oído hablar mucho en los últimos años son los Webhooks.

Qué es una API y para qué sirve

Una API (Application Programming Interface) es una vía para que una aplicación exponga datos y funcionalidad a otras aplicaciones.

En las APIs que se exponen a Internet, una forma común de poner a disposición estos datos y funcionalidades es mediante una API REST, que básicamente consiste en una API que funciona recibiendo llamadas HTTP (como las que haces con tu navegador) en ciertas direcciones (URL) que se conocen como endpoints.

Por ejemplo, si estamos creando una tienda online y necesitamos servicios de pago, podemos usar la API de la conocida pasarela de pagos Stripe para delegar en ella multitud de cuestiones. A través de esta API podemos efectuar acciones, como llamar al endpoint que genera un cargo en una tarjeta de crédito, pero también podemos obtener información, como averiguar nuestro saldo u obtener un listado de nuestros clientes.

Existen APIs REST para todo tipo de servicios y funcionalidades: desde información del tiempo hasta las cosas más complejas con mapas o inteligencia artificial. Y la mayor parte de las aplicaciones Web que utilizas exponen parte de su funcionalidad (¡o toda!) a través de una API REST.

Qué es un Webhook y para qué sirve

Casi todo lo que hacemos en una aplicación, al final se traduce en eventos. Por ejemplo, volviendo al caso de la tienda online, un evento de interés para nosotros se produce en el momento en el que se procesa un pago con éxito. En ese instante nos interesará hacer varias cosas: enviar un correo al comprador, generar una factura, poner en marcha el proceso de envío del producto, etc.

Si lo único que tenemos es una API REST tradicional, para enterarnos de que un evento ha ocurrido en otra aplicación (la compra se ha efectuado con éxito en la pasarela de pagos), deberemos consultar la API periódicamente. Por ejemplo, mandamos a la pasarela la orden de pago, y por diversos motivos pueden pasar varios minutos hasta que se procese. Nuestra tienda llamaría a la API cada poco tiempo para conocer el estado de la operación, hasta el momento en el que nos dé un resultado (se ha procesado con éxito, se ha cancelado...). Lo podemos visualizar como algo así:

Proceso con la API y llamadas periódicas

Bien, un Webhook invierte esta situación, para que sea la aplicación que nos interesa la que nos notifique automáticamente cuando se ha producido un determinado evento.

Es decir, un Webhook es también un endpoint pero en nuestra aplicación, y en lugar de iniciar la llamada nosotros, es la aplicación con la que nos coordinamos la que nos notifica cuándo ocurre algo de interés. Le da la vuelta a la comunicación.

En nuestra hipotética tienda, lo que haríamos sería registrar en Stripe un Webhook para el evento de que se ha procesado un pago y será la pasarela la que llame a un endpoint nuestro cuando se produzca, pudiendo iniciar el resto de acciones que procedan para ese caso.

De hecho, esta es la forma recomendada de realizar la integración con Stripe: mediante la API de Intents, que se basa en el uso de webhooks.

El esquema de las comunicaciones ahora es así:

Esquema de funcionamiento de un Webhook

Este esquema de funcionamiento tiene muchas ventajas, tanto para la aplicación usuaria como para la que presta el servicio:

  • Ahorro de recursos y tiempo: con una API, la aplicación usuaria hará muchas veces llamadas "para nada", que no devolverán información alguna. Las dos aplicaciones gastan recursos para hacer y responder a muchas llamadas que no tienen utilidad alguna.
  • Eliminación de los retrasos: con un webhook la aplicación usuaria recibirá una llamada en el momento exacto en el que la necesita y no tendrá retrasos.
  • Velocidad de las llamadas: generalmente la llamada que se hace a un webhook es muy rápida pues solo se envía una pequeña información sobre el evento y se suele procesar asíncronamente. Muchas veces ni siquiera se espera por el resultado: se hace una llamada del tipo "fire and forget" (o sea, dispara y olvídate), pues se trata de notificar el evento y listo.

A los webhooks se les llama muchas veces API inversas (o reverse APIs en inglés), ya que tienes algo parecido a una API (un contrato entre las dos partes) pero las llamadas se hacen en el sentido contrario al habitual.

Los webhooks suelen estar en los dos lados. Es decir, en el ejemplo anterior nuestra tienda expone un webhook, pero la otra aplicación podría tener también sus propios webhooks a los cuales llamaremos cuando se produzcan eventos de interés por nuestra parte (no es el caso de Stripe).

¿Qué aplicaciones ofrecen Webhooks?

Pues hoy en día prácticamente todas.

Veamos ejemplos de algunas plataformas conocidas:

Github ofrece webhooks para notificar a otras aplicaciones cuando se producen ciertos eventos (por ejemplo, un push a master o a una rama):

Interfaz dde configuración de Webhooks en Github

Mailchimp, el famoso software de email marketing ofrece webhooks para notificar a otras aplicaciones cuando se producen eventos como que haya una nueva alta o baja en un boletín, o un si suscriptor ha cambiado su dirección de email.

Shopify, una de los productos de tienda online más utilizados del mundo, ofrece webhooks para notificarnos acerca de multitud de eventos, como cuando un usuario procesa una compra, solicita un reembolso o añade algo al carrito.

Twilio, el líder mundial en productos de telefonía y mensajería para desarrolladores, ofrece multitud de webhooks para notificar eventos a tu aplicación (por ejemplo, si se recibe una llamada) y para que tu aplicación le pueda notificar cosas también.

Sendgrid, el archiconocido backend para envío de email, ofrece Webhooks para notificar cosas como la recepción de un mensaje o un correo enviado que rebota, entre otras muchas cosas.

Como ya dije antes, la mencionada pasarela Stripe recomienda el uso de webhooks para recibir notificaciones sobre cosas que ocurren con tus clientes.

Podría seguir todo el día, pero el resumen es: los webhooks son ya una parte integral del desarrollo de aplicaciones, y debemos aprender a sacarles partido para automatizar procesos en nuestros desarrollos y también deberíamos ofrecerlos para que otras aplicaciones puedan coordinarse con las nuestras.

Integración de múltiples aplicaciones usando Webhooks

Otra cuestión fundamental y muy interesante de los webhooks es que te permiten delegar la coordinación de tareas a servicios externos, ahorrándote mucho tiempo de desarrollo y problemas.

Por ejemplo, en el caso anterior del comercio electrónico, en lugar de ser tu aplicación la responsable de recibir el webhook de Stripe y llamar a otros servicios para enviar el correo, generar la factura, etc... puedes usar un servicio de orquestación para que haga todo por ti. Pagando una pequeña cuota mensual (o incluso de forma gratuita) tienes un punto central que coordina todas las aplicaciones que usas, incluyendo las propias, gracias al uso de webhooks. Además te permite crear reglas complejas en función de lo que ocurra y de los datos que recibas, y te aseguras la continuidad sin mantener servidores.

Ejemplo de la interfaz de usuario de un orquestador, en este caso n8n.io

Existen diversas aplicaciones que, mediante el uso de webhooks y con integraciones de API hechas por ellos mismos que se comportan como webhooks, permiten definir procesos entre múltiples servicios que responden ante eventos y crear flujos propios.

Esto que suena un poco lioso, en realidad es muy sencillo y simplifica enormemente los desarrollos, ya que te permiten definir tus procesos de forma visual y sin apenas conocimientos técnicos.

Los servicios de este tipo más conocidos son:

  • Zapier, casi el estándar, que integra más de 2.000 aplicaciones de casi cualquier cosa que se te ocurra, y permite crear todo tipo de flujos entre ellas. Para mi gusto la interfaz de usuario la han estropeado en los últimos años queriendo hacerla más sencilla. Tiene una capa gratuita bastante generosa.
  • Integromat: una aplicación de una pequeña empresa checa pero que tienen un gran peso en este nicho. No ofrece tantos servicios como Zapier (aunque sí muchos) pero es muy fácil integrar cualquier servicio externo con los conectores HTTP y JSON (webhooks) e incluso cosas antiguas con los conectores XML y SOAP. Su capa gratuita es muy generosa.
  • IFTT: una de las pioneras, pero que se han orientado más a integrar productos del hogar digital y que, en mi opinión, tiene una de las interfaces de usuario menos usables que se han diseñado. Eso sí, es gratuita y te da algunas integraciones interesantes no presentes en otros servicios (por ejemplo: Telegram). Los conectores para Webhooks son un tanto limitados en cuanto a parámetros que se pueden enviar y recibir porque los han pensado para IoT (pequeños dispositivos conectados) y no tanto para facilitar integraciones.
  • Microsoft Power Automate. Empezó como Microsoft Flow hace unos años, con una orientación más hacia usuarios finales y con una versión gratuita bastante generosa. Ahora forma parte de la familia de Power Platform, y tiene una orientación completamente empresarial. Sin capa gratuita. Si trabajas con Office 365 o Azure, es el camino a seguir.
  • n8n.io: menos conocida pero muy potente, esta plataforma de orquestación es gratuita y de código abierto. En mi opinión, tiene la interfaz de usuario más interesante de todas, que te permite ver de un golpe de vista lo que estás haciendo en cualquier flujo aunque sea complicado (es la figura de más arriba). No tiene tantos servicios preintegrados como las otras, pero es muy fácil usar webhooks para hacerlo. La puedes incluso albergar en un servidor propio.

Existen algunos más e incluso los hay orientados especialmente a programadores, como Pipedream, NodeRed o StackStorm.

¿Qué debo usar: API o Webhooks?

Lo primero que hay que tener claro es que no son elecciones excluyentes. Las API tienen sus usos y los webhooks otros distintos, aunque a veces se puedan solapar.

Aunque con webhooks se pueden obtener datos y ejecutar acciones, por regla general las API están más orientadas a esto último. Normalmente automatizarás a otras aplicaciones usando sus API, aunque puedes provocar acciones en otras aplicaciones usando webhooks también.

Si la operación tiene que ver más con un usuario concreto o una acción individual, lo más normal es que haya un webhook apropiado. Pero si lo que necesitas es consultar información puntualmente, tendrás que usar una API. Si necesitas ampliar la información de una operación, normalmente necesitarás usar la API también (por ejemplo, puedes recibir un webhook para decirte que un usuario ha comprado un producto, pero si quieres saber si ese usuario ha comprado antes o cuánto saldo tiene en su cuenta, necesitarás llamar a la API).

Como ves son herramientas complementarias y cada una tiene sus usos más apropiados según tus necesidades.

Si lo ves desde el otro punto de vista, que tu aplicación permita su automatización, entonces deberías tener ambas cosas: una API y diversos webhooks, por los mismos motivos expuestos antes.

En resumen; los webhooks son una herramienta de desarrollo muy potente que nos permite ahorrar recursos, tiempo y problemas de información desactualizada. Utilizados en combinación con otros servicios pueden ayudarnos a automatizar de manera sencilla y rápida tareas complejas. Complementándolos con una buena API permiten colaborar con otras aplicaciones de manera sencilla y profesional.

¡Espero que te resulte interesante!

José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón
Archivado en: Desarrollo Web | Herramientas

¿Te ha gustado este post?
Pues espera a ver nuestro boletín mensual...

Suscríbete a la newsletter

La mejor formación online para desarrolladores como tú

Comentarios (1) -

Hola! Excelente artículo! Tengo una duda: tengo una tienda electrónica en proceso de construccion con woocommerce que vende cursos, y los pagos se hacen por stripe y mercadopago. Tengo un webhook de stripe, pero no está funcionando: https://4viento.info/nemiliztli/?wc-api=wc_stripe Sólo aparece "Ha habido un error crítico en tu web." Curiosamente solo si desactivo woocommerce el webhook funciona perfectamente. Si sólo desactivo el plugin de Mercado Pago me sale error 400. ¿Qué puede estar pasando? Al parecer los pagos funcionan bien aunque el webhook no funcione. ¿Lo podré dejar así? ¿O es importante activar se webhook? ¿Podré crear otro webhook para stripe y ver si ese funciona? De antemano muchas gracias!

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.