¿Qué son los Webhooks?

webhooks logo
webhooks logo

Alguna vez has programado algo y haz colocado funciones callbacks, o hooks en tu lógica?
Que sucedería si aplicáramos esta practica de programación entre todos los servicios web en el Internet, fácilmente un salto evolutivo en la historia de la red a partir de algo tan sencillo que parece estúpido. Si eres un desarrollador web no puedes dejar de leer este artículo.

Qué es un Hook?

Por ejemplo, en Javascript, cuando se programa AJAX es común definir callbacks para cuando los HTTP Requests han terminado, estos callbacks o hooks sirven para hacer cosas como actualizar la interfaz gráfica.

La lógica de un hook es básicamente pasar una función h como parámetro a otra función f. Cuando llega el momento correcto f invoca la función h.

Veamos un ejemplo sencillo en Javascript de como utilizamos hooks o callbacks hoy en dia en programas que corren en un solo procesador.

// Definimos una funcion hook.
// ("..." representaría parámetros cualesquiera.)
function h(...) {
  //código de función hook
}

// Una función que recibe como parametro una función hook
function f(h) {
   //lógica de la función
   ...
   //luego en algún punto, cuando sea el momento correcto,
   //invocamos al hook
   h(...)
}

//Así usamos a la función, pasamos el hook como parámetro
f(h)

Entonces…

Un Webhook es casi lo mismo que una función hook, la diferencia es que en vez de pasar tu hook a una función dentro de un programa local, invocamos un WebService definido por un tercero dándole la URL de nuestro WebService local o Webhook.

Cuando sea el momento adecuado el WebService remoto hará POST o GET para invocar tu Webhook notificando a tu sistema del evento que estabas esperando sin necesidad de hacer polling.

Generalmente tu Webhook tendrá que ser definido bajo ciertos estándares, lo mas probable es que el WebService remoto necesite invocar los Webhooks pasando ciertos parámetros, tu Webhook deberá soportar estos parámetros.

Ejemplos y Aplicaciones

No mas polling!, para empezar.

Cuando envías alguien a pagar con Paypal, o con otra API para procesamiento de pagos, generalmente el usuario sale por un momento de tu sitio web, pero en el formulario de Paypal, inicialmente pasamos como parámetros a Paypal URLs nuestras para que Paypal devuelva el usuario a nuestro sitio. De este modo no tenemos que estar haciendo requests (polling) a Paypal, esto es básicamente un Webhook primitivo, solo que no se le había puesto nombre.

Si empezamos a pensar mas en Webhooks, podemos empezar a ver a todos los Web Services como un gran repositorio de librerías asíncronas. Con el uso de Webhooks podemos por ejemplo pensar en implementar notificaciones en tiempo real sin necesidad de estar haciendo polling, pensemos por ejemplo en Chats tipo AJAX (saber si tu amigo esta escribiendo, o que acaba de escribir). Podríamos pasar URLs a entes remotos para que invoquen a nuestros callbacks justo cuando estén listos, eliminando la necesidad de hacer polling cada N segundos.

Ahi lo tienen, es tan simple que parece estúpido. No es una API, no es una tecnología, es solo un patron de diseño donde definimos hooks que pueden ser invocados por terceros via HTTP. Simple y Elegante.

Enlaces Relacionados

Presentación sobre WebHooks
Blog Oficial de Webhooks.org
Hookpress (plugin de webhooks para wordpress)

Sobre Gubatron

Gubatron es un desarrollador de Software Venezolano con experiencia en desarrollo de aplicaciones web y software de internet para uso masivo. En su tiempo libre es un adicto a las noticias, analiza diferentes modelos de negocio y mercadeo, blogea, podcastea e identifica las tendencias tecnológicas generalmente con 2 años de adelanto. Se le puede reconocer como ex-desarrollador de LimeWire, fundador de wedoit4you.com, colaborador de FrostWire, MyBloop.com y ahora autor invitado de NoLaPeles.com

[ad#Gubatron-Adsense-336x280IMG]

  • gracias por la aclaración tenia mis dudas y asta pensaba otras cosas…, de todas maneras consumirá muchos recursos este método de Sincronización? gracias

    • Consumes menos recursos porque no tienes que estar haciendo polling (preguntando a cada rato el estado de la transaccion). Le estas diciendo al servidor donde empezaste la transaccion, que cuando termine, invoke X funcion sobre ti.