#3 Hablemos sobre WebHooks

Aprende cómo conectar diferentes aplicaciones entre sí utilizando simplemente eventos.

Hola! 👋🏼 Ya estamos en la 3ra edición de Nico’s Newsletter.

Recuerdas que la semana pasada hablamos de comunicación en tiempo real? (Aquí la tienes). Bueno, hoy vamos a continuar por esa rama pero no precisamente hablaremos de web sockets.

Para esta edición hablemos mejor de web hooks.

Me parece importante comentar sobre el tema porque es un concepto que está en bastante auge por la salida de muchas herramientas No-code y personalmente lo estoy utilizando bastante en un proyecto de Shopify, entonces como dicen por ahí: No hay mejor forma de aprender algo que explicándolo.

La idea principal de los web hooks es: comunicar varios sistemas entre sí basándonos en eventos. Pero, primero deja que te comente un poquito sobre los web sockets.

Si hablamos de web sockets, sabemos que la comunicación es bi-direccional entre el cliente y el servidor, lo que permite enviar y recibir información en tiempo real con baja latencia y no implica mucha carga de cómputo.

Esto nos sirve por ejemplo para:

  • Dashboard de analíticas.

  • Chat estilo Whatsapp o Messenger.

  • Juegos en línea.

Y no todo es color de rosas porque si quieres utilizar este protocolo en tu servidor, vas a tener que implementarlo y no es tan fácil como desarrollar para HTTP (Obviamente, es 2023 y existen librerías y todo eso 😂).

Ahora, si hablemos de web hooks la cosa es muy diferente.

La diferencia principal que hay entre web sockets y web hooks es que este último solo permite la comunicación uni-direccional. Y seguramente dirás “que inútil” pero de hecho es todo lo contrario.

Este protocolo web está basado en eventos, entonces el cliente y el servidor operan de forma independiente. Esto quiere decir que puedes integrar diferentes sistemas y no importa la plataforma o el lenguaje de programación, siempre vas a poder reaccionar a lo que suceda en otro sitio.

Te pondré como ejemplo mi caso, yo estoy creando una aplicación de picking y packing (Al estilo Shiphero) que utiliza las órdenes de Shopify, pero la gracia esta en que yo no puedo acceder a la base de datos de ellos entonces ¿Cómo se cuando se crea una orden si mi aplicación es algo externo a Shopify?

Ahí es donde entran en juego los web hooks, Shopify tiene un evento para básicamente todo lo que sucede en la plataforma, entonces puedes enterarte cada vez que se agrega o actualiza un producto, un cliente, una orden y demás.

Entonces esta flexibilidad me permite a mi como desarrollador estar atento a esos eventos y ejecutar las acciones necesarias para que mi aplicación funcione con base en ello.

Otro ejemplo que tengo bastante fresco es el de Stripe. Si estás haciendo por ejemplo una aplicación X y ofreces planes de suscripción, estoy 100% seguro de que vas a necesitar web hooks. Lo más normal es que tengas una tabla en tu base de datos que guarde el valor de si el usuario pagó o no, pero muchas veces por cosa de los bancos, la transacción no se procesa inmediatamente entonces esta va a quedar en “stand-by” y cuando el banco la procese y se cobre (o no) el dinero, Stripe ejecuta los respectivos web hooks que van a notificarte a ti que pasó con esa transacción y entonces ya tu verás que hacer con esa información.

Para finalizar

Un web hook acaba pareciéndose a una llamada API, pero al revés. En lugar de que tu llames a la API y solicites los datos, la API te va a llamar a ti para informarte de que ha ocurrido algo.

Recursos gratuitos

  • Vercel lanzó v0.dev, una web para crear componentes de React con texto.

  • Firecamp, la alternativa de Postman open source (Está muy interesante 👌🏻).

  • Apréndete los códigos de status HTTP con gatitos: http.cat

  • Reemplazo de Mockaroo utilizando AI: jsondataai

  • Genera tests unitarios utilizando AI: refraction.dev

3 Noticias para ti

Nos vemos en la edición #4

Gracias por haber llegado hasta aquí ❤️.

Recuerda que si quieres hablar de algo en particular puedes sugerir el tema respondiendo este mismo correo.

Hasta pronto, Nicolás Leal.