[Catalyst] Implementing Webhooks.

2014-01-15 Thread Bill Moseley
I'm running Catalyst under mod_perl2 (currently, subject to change).   Some
requests trigger a callback to a user-provided URL -- a webhook.

Obviously, it's best to do those asynchronously and not in-process.   Don't
want a web request (or really an Apache process) hanging while waiting on
an external web server to respond.

A queue is probably the best approach, but there's also some advantage of
having the Catalyst app make the webhook request -- specifically because
the Catalyst app has the context of the request and has application logging
available.

How would you implement this?


How would that change if you wanted more than just fire-and-forget?  For
example, if you wanted to provide some kind of retry interval for failed
callbacks. The external server might be temporarily down for maintenance.


Thanks,


-- 
Bill Moseley
mose...@hank.org
___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Implementing Webhooks.

2014-01-15 Thread Tomas Doran
My take on this is to log things into ZeroMQ (via Message::Passing), and route 
them to Message::Passing::Output::WebHooks - the code for that output might not 
be as bullet proof as you’re looking for, but it should be a reasonable 
starting place.

I’d probably go right ahead and implement the timeout in that output for a 
first take - you’d lose anything which was waiting in a retry interval as and 
when you restarted the hook server, but that would presumably be very 
infrequently, and if you had _lots_ of timeouts, it could use a lot of RAM.. 
But depending upon that scale / relaibility you actually need both of these 
things might be just fine.

Cheers
Tom

On Jan 15, 2014, at 7:28 PM, Bill Moseley mose...@hank.org wrote:

 I'm running Catalyst under mod_perl2 (currently, subject to change).   Some 
 requests trigger a callback to a user-provided URL -- a webhook.
 
 Obviously, it's best to do those asynchronously and not in-process.   Don't 
 want a web request (or really an Apache process) hanging while waiting on an 
 external web server to respond.
 
 A queue is probably the best approach, but there's also some advantage of 
 having the Catalyst app make the webhook request -- specifically because the 
 Catalyst app has the context of the request and has application logging 
 available. 
 
 How would you implement this?
 
 
 How would that change if you wanted more than just fire-and-forget?  For 
 example, if you wanted to provide some kind of retry interval for failed 
 callbacks. The external server might be temporarily down for maintenance.
 
 
 Thanks,
 
 
 -- 
 Bill Moseley
 mose...@hank.org
 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/