Cómo probar webhooks desde API públicas en desarrollo local

Publicado: 2022-08-26

Los webhooks son un mecanismo para recibir notificaciones sobre eventos de sistemas dispares sin tener que sondearlos continuamente. También llamadas API inversas, se puede considerar que proporcionan "especificaciones de API" que el sistema de consumo necesita implementar. Uno de los desafíos de trabajar con webhooks es probar el código que escribe para procesar webhooks en su entorno de desarrollo local. En este artículo voy a mostrarte algunas de las opciones disponibles para probar webhooks localmente.

¿Cómo funcionan los webhooks?

A medida que el mundo se vuelve cada vez más interconectado, es más probable que su aplicación necesite recibir información de otros sistemas. Una forma de hacer esto es sondear periódicamente el otro sistema para ver si hay información nueva disponible, pero tendría que sondear con mucha frecuencia para obtener algo parecido a los datos en tiempo real. Una forma más eficiente de hacer esto es usar webhooks.

Un webhook es esencialmente una solicitud HTTP enviada por el sistema de origen a una URL registrada en el sistema de destino. En términos de programación, los webhooks pueden considerarse una implementación del patrón Observer. Aquí es donde el sistema de consumo se registra para recibir notificaciones de eventos en el sistema de origen mediante el registro de un punto final o URL.

La mayoría de los sistemas de origen admiten medidas de seguridad, como permitirle configurar la autenticación básica o la autenticación mediante tokens de portador al registrar un punto final. Cuando ocurre un evento que un sistema ha registrado para recibir una notificación, el sistema de origen envía una solicitud HTTP al extremo registrado con una carga útil que contiene información relacionada con el evento.

Los webhooks son ampliamente utilizados por las aplicaciones web modernas. Por ejemplo:

  • Paypal utiliza notificaciones de pago instantáneas (IPN), que son esencialmente webhooks para enviar notificaciones cada vez que se recibe un pago.
  • GitHub usa webhooks para informar a los sistemas de CI/CD cuando ocurre un evento de inserción.
  • Slack implementa webhooks entrantes que permiten que cualquier sistema envíe mensajes que se publican en canales seleccionados de Slack.

Trabajar con webhooks

Como se mencionó anteriormente, las URL de webhook se pueden considerar como API inversas que el sistema de consumo debe implementar. Por lo general, las solicitudes de webhook se procesan escribiendo código en un lenguaje de programación como PHP. Antes de escribir cualquier código para procesar la información enviada a través de un webhook, necesita una comprensión clara de cómo se ve la carga útil. Una vez que escriba un código para procesar la carga útil, debe poder probar que su código hace lo que debe hacer cuando recibe el webhook, como devolver el código de estado correcto.

Inspección de cargas útiles y pruebas de webhook

Las herramientas como Request Bin le permiten crear un punto final de acceso público que puede configurar en su sistema de origen. Cada vez que ocurre un evento para el que se ha registrado, el sistema de origen envía una solicitud HTTP GET o POST a su contenedor, lo que le permite inspeccionar la carga útil. Request Bin también le permite ver elementos como encabezados, lo que facilita la depuración y la resolución de problemas. Para ver cómo funciona, diríjase a Solicitar papelera y haga clic en el enlace que dice Crear una papelera pública en su lugar . Se le presentará una URL que puede configurar como punto final en su sistema de origen.

Por ejemplo, agregué un webhook a mi sitio de WooCommerce siguiendo los pasos descritos en la documentación de WooCommerce. En el campo "URL de entrega", ingresé la URL que me presentó Request Bin.

Agregar webhooks a un sitio de WooCommerce.

Cuando creé un pedido, WooCommerce envió una solicitud HTTP al punto final configurado y pude inspeccionar la carga útil de inmediato accediendo a la URL de mi contenedor en el contenedor de solicitudes.

Inspección de una carga útil de webhook en la bandeja de solicitudes.

Por lo general, no querrá crear un contenedor público, ya que es accesible para cualquier persona que tenga la URL del contenedor. Por lo general, es mejor crear un contenedor privado, lo que requiere que crees una cuenta con Pipedream.

Recepción de webhooks localmente

Antes de implementar cualquier código que procese webhooks, debe probar su código en su entorno de desarrollo. Para eso, debe poder exponer su punto final local como una URL pública que puede configurar como la URL de destino en el sistema que envía los webhooks. Hay bastantes herramientas disponibles para que usted haga eso.

Exponiendo puntos finales locales con ngrok

Podría decirse que la herramienta más utilizada para exponer un punto final local a Internet es ngrok. Para comenzar a usar ngrok, debe crear una cuenta gratuita.

Instalar ngrok es bastante sencillo. Dirígete a la página de descargas, obtén el binario apropiado para tu sistema operativo, descomprímelo y cópialo en un directorio en tu ruta. En una Mac, también puede usar Homebrew para instalar ngrok:

preparar la instalación ngrok/ngrok/ngrok

El siguiente paso después de instalar ngrok es agregar un token de autorización. Una vez que cree una cuenta e inicie sesión, puede obtener su token visitando su tablero.

ngrok config agregar token de autenticación (token)

Ahora está listo para exponer la URL de su punto final local mediante ngrok. Suponga que tiene una aplicación web ejecutándose en el puerto 80. En su terminal, escriba ngrok http 80 . Su salida debería verse así:

ngrok (Ctrl+C para salir)
                                                                                                                                                                                                                      
Visite http://localhost:4040/ para inspeccionar, reproducir y modificar sus solicitudes                                                                                                                                             
                                                                                                                                                                                                                      
Estado de la sesión en línea                                                                                                                                                                                  
Cuenta Sanjucta Ghose (Plan: Gratis)                                                                                                                                                             
Versión 3.0.6                                                                                                                                                                                   
Región Asia Pacífico (ap)                                                                                                                                                                       
Latencia 89ms                                                                                                                                                                                    
Interfaz web http://127.0.0.1:4040                                                                                                                                                                   
Reenvío https://deec-110-227-84-74.ap.ngrok.io -> http://localhost:80                                                                                                                           
                                                                                                                                                                                                                      
Conexiones ttl opn rt1 rt5 p50 p90                                                                                                                                             
                              0 0 0,00 0,00 0,00 0,00 

Ahora tiene una URL de acceso público, https://deec-110-227-84-74.ap.ngrok.io , que puede usar como su URL de destino al configurar su webhook.

Ngrok ofrece interruptores y opciones que le permiten configurar cómo funciona. Puede ver qué opciones están disponibles con ngrok -help .

Usando ngrok con hosts virtuales

Es probable que sirva su sitio local a través de un host virtual, un mecanismo que le permite atender varios dominios desde un único servidor web. Los servidores web normalmente implementan esto comprobando el encabezado del host de la solicitud HTTP para determinar qué sitio web se debe servir. Para exponer un sitio servido a través de un host virtual, debe pedirle a ngrok que reescriba el encabezado Host de todas las solicitudes tuneladas para que coincida con lo que espera su servidor web. Suponga que tiene un sitio local ejecutándose en http://hellfishmedia.test . Para exponer este sitio, puede usar el siguiente comando:

ngrok http --host-header=hellfishmedia.prueba 80

Usando ngrok con WordPress

Si la URL que está tratando de exponer usando ngrok es un punto final de WordPress, la documentación describe un par de cosas que debe hacer para asegurarse de que funcione.

Usando ngrok con Laravel Valet

No necesita instalar ngrok por separado si es usuario de macOS y usa Laravel Valet como su entorno de desarrollo local. Valet viene con una copia de ngrok que utiliza para exponer las URL de acceso público. Simplemente puede navegar al directorio de su sitio y usar el comando valet share para obtener una URL de acceso público.

Debe mencionar el nombre de dominio cuando utilice el comando valet share si ha asociado su sitio a un dominio que es diferente del nombre del directorio del sitio. Por ejemplo, si usa valet link hellfishmedia para que su sitio esté disponible en http://hellfishmedia.test , también debe usar el siguiente comando para obtener una URL de acceso público:

valet compartir hellfishmedia

Uso de lo local como su entorno de desarrollo local

Local by WP Engine es un entorno de desarrollo local muy popular para los desarrolladores de WordPress. Local hace que sea muy fácil exponer un punto final local utilizando la función Live Links sin necesidad de ningún software adicional.

Alternativas a ngrok

Existen varias alternativas a ngrok que le permiten exponer un punto final local a Internet. He probado dos de ellos a continuación.

Túnel local

Localtunnel es una alternativa de código abierto que le permite exponer un punto final local sin necesidad de crear una cuenta. Sin embargo, deberá tener instalado Node.js.

Para instalar Localtunnel, use el comando:

npm install -g túnel local

Para exponer una aplicación que se ejecuta en localhost:80 , ejecute el siguiente comando en la terminal:

lt --puerto 80

Si su aplicación local se ejecuta a través de un host virtual en http://hellfishmedia.test , entonces puede usar el conmutador localhost

lt --puerto 80 --localhost hellfishmedia.prueba

cometa

Pagekite es otro servicio que le permite exponer un punto final local. Está escrito en Python y requiere que tengas Python instalado en tu sistema. Suponiendo que está en una Mac y tiene Python 3.x instalado, puede comenzar rápidamente escribiendo lo siguiente en su terminal:

curl -O https://pagekite.net/pk/pagekite.py

Esto obtendrá el programa pagekite.py por usted. Después de eso, puede crear su primera "cometa" usando el siguiente comando y reemplazando (su nombre) con el nombre que desea usar para identificar su cometa:

python3 pagekite.py 80 (su nombre).pagekite.me

Se le pedirá que ingrese su dirección de correo electrónico para crear una cuenta cuando ejecute este comando por primera vez. Posteriormente, cuando ejecute este comando, deberá iniciar sesión en su cuenta ingresando su contraseña. El comando anterior hará que localhost:80 esté disponible en (yourname).pagekite.me .

Para exponer su sitio local que se ejecuta en hellfishmedia.test a través de un host virtual, puede usar el siguiente comando:

pagekite.py deliciousbrains.test:80 (tu nombre).pagekite.me +rewritehost

Conclusión

Los webhooks son una forma conveniente y ahora casi omnipresente para que los sistemas se comuniquen a través de HTTP. Como desarrollador, debe poder inspeccionar la carga útil para procesar webhooks, que es donde los servicios como Request Bin son útiles. Probar el código de procesamiento del webhook significa que necesita exponer su punto final local a Internet. Esto es posible gracias a una serie de servicios que incluyen ngrok, Localtunnel y Pagekite.

¿Alguna vez ha tenido que escribir código para procesar webhooks? Si es así, ¿qué herramientas usó para probar sus webhooks? Házmelo saber en los comentarios.