services icon indicating copy to clipboard operation
services copied to clipboard

[Feature] Webhooks service

Open hrdwdmrbl opened this issue 2 years ago • 10 comments

I would love a service that allows for subscribe, unsubscribe, list subscriptions for clients and reliable sending & retrying events for servers.

Some clients prefer a polling-style service (GET /events.json?since=2022-09-28+15%3A02%3A59+%2B0200) where they can fetch events at their own pace.

hrdwdmrbl avatar Sep 28 '22 13:09 hrdwdmrbl

Some more:

  • /events with long-polling would be great!
  • Automatically remove subscriptions after N retry failures
  • Receiver should be able to validate the message using HMAC signatures from the sender

hrdwdmrbl avatar Sep 28 '22 13:09 hrdwdmrbl

How are these events produced? Assuming if it's a webhook service that there's an endpoint where events are sent?

asim avatar Sep 28 '22 20:09 asim

I imagine 3 parties: a client consumer, a server producer and the webhook microservice between them.

Example: e-commerce website

Channels: orders/create, orders/update, orders/shipped

Consumers: Subscribe to the channels they are interested in

Producer: The e-commerce website lets the webhook service know (creates an event) each time an order was created, updated or shipped.

Webhook service: Let's all subscribed consumers know about the event.

hrdwdmrbl avatar Sep 28 '22 21:09 hrdwdmrbl

I think what you're talking about in general is a message queue or stream of events not exclusive to webhooks. We have an event service for this. https://github.com/micro/services/tree/master/event

asim avatar Sep 29 '22 05:09 asim

@asim Oh yeah, I'm aware of the event service. I am talking about a webhook service. You can think of webhooks like a specialized message service though. It's just like, events received in a certain way or style.

hrdwdmrbl avatar Sep 29 '22 15:09 hrdwdmrbl

I'd be interested to see what a complete API for webhook service looks like. Definitely something that we should include.

asim avatar Sep 29 '22 16:09 asim

Here is an example for Webhook consumers https://shopify.dev/api/admin-rest/2022-07/resources/webhook

I don't have an example of a producer API though. I googled and found this though: https://api.svix.com/docs#tag/Message/operation/create_message_api_v1_app__app_id__msg__post

hrdwdmrbl avatar Sep 29 '22 17:09 hrdwdmrbl

Do you have a specific use case in mind for this? I think its better built when needed as opposed to just for the sake of building it. Likely the use case will help inform the design.

asim avatar Sep 29 '22 17:09 asim

Only a bad experience at a company that chose to invest far too much time and resources creating yet another webhook service. :)

At this time I am only a webhook consumer of Shopify's API I reference. Though as https://hookdeck.com/ demonstrates and I can personally attest to, reliably receiving all webhooks that are sent is not as easy as it sounds :) So perhaps a dedicated webhook consumer (middleman) service would also be valuable. Up until now I only had in mind a webhook dispatching sending service.

hrdwdmrbl avatar Sep 29 '22 17:09 hrdwdmrbl

I welcome a webhook service contribution. I think personally it's a little bit beyond my capabilities at this moment.

asim avatar Sep 29 '22 19:09 asim