Webhook of the week - Asana
I was looking forward to adding a new webhook source integration for Asana for quite some time. Their documentation describes important features of a great webhook implementation that includes a full API, unique event ID and timestamp, plus HMAC-SHA256 signed payloads. I like the ability to narrow webhook events to specific project and task resources, but would like to see the ability to define webhooks for any resource as well.
It took some experimenting to get ID handling working as the documentation was a bit confusing. Some IDs are integers, others are strings, and sometimes they are nested in a data
object. Events are batched, which cuts down on HTTP requests, but puts more responsibility for proper handling on webhook event processing code.
It was unfortunate to see no ability to manage webhooks in their dashboard. I find even a simple user interface for viewing configured webhooks is really a must. It also provides a place to offer the ability to send test events, though it was very easy to generate events by making project changes. I did find an open-source webhook manager on GitHub, but it really should be part of their service.
The really unique feature of their webhooks was the use of the REST Hooks protocol. It’s actually very rare to find webhooks that use this approach. The best part is the transparent communication of the shared secret used for signing and verifying of both the newly created webhook, and every subsequent event payload. The downside is how validation and event handling are both handled in the same POST request. It’s more than complicated enough to handle the challenges of properly processing webhook events in POST requests. I’ve found that Stripe’s implementation provides the same benefit without the added complexity.
Overall I’m very happy to have everything working smoothly now with Asana in Hookalu. It’s also great to have flexible REST Hooks support for use with future webhook integrations. Talk with me if you’re a developer looking for help getting Asana webhooks working with your application.