Advertisement
Advertisement

More Related Content

Advertisement
Advertisement

Web Hooks and the Programmable World of Tomorrow

  1. WEB HOOKS and the Programmable World of Tomorrow Jeff Lindsay introduction talk about this idiom, show examples, share ideas, explain significance how many are familiar with this idiom?
  2. Web Service internetz User for those that don’t know: a story
  3. Web Service Hi, I’m Twickr, a new web service. internetz User
  4. “Twickr” Cool. Sign me up. internetz User
  5. “Twickr” Okay, you’re all set. Now listen... internetz User
  6. “Twickr” I might find myself with some data you might be interested in. internetz User
  7. “Twickr” Alight, hold on a sec... internetz User
  8. “Twickr” internetz User hack hackety hack
  9. “Twickr” Could you just post it here when you have any? http://tinyurl.com/6pln4u internetz User
  10. “Twickr” ...sure, why not. Hmm, what is that URL? internetz User
  11. “Twickr” It’s a PHP script I put up on Dreamhost. internetz User
  12. “Twickr” What does it do? internetz User
  13. “Twickr” Whatever I want... internetz User web hooks are simple http event notifications meant to trigger other web scripts
  14. the idea is not new, but not exactly popular. why? paypal has been doing it for ages
  15. instant payment notification is a web hook
  16. “When a customer pays you, PayPal posts a notification to your server at a URL you specify.”
  17. here’s a diagram. they’ve since added anti-spoofing by requiring a validation step. useful pattern, but not core to the idea
  18. started thinking about this in 2006. everything flashed before my eyes and was confused why it wasn’t used more. felt like i was taking crazy pills
  19. compare to REST.
  20. both have been around longer, but the point is rest simpler.. in fact, it’s almost described as “using HTTP properly” but not until it got a name could it be used in discourse to make it popular
  21. REST Hooks rest and web hooks are two sides of the same coin they complement each other in ways i’ll get to later but i just want to give this pattern a name, and start associating some ideas with it
  22. Push Pipes Plugins talk is split into three sections ways to look at the use of web hooks icons will hopefully make more sense as i talk about them
  23. Push let’s get started with push people are starting to talk about push in the context of web content
  24. because of feeds. or rather, the success of feeds it started with blog feeds, then comment feeds...
  25. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  26. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  27. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  28. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  29. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  30. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  31. then soon exploded into twitter feeds, photo feeds, activity feeds, event feeds, bookmark feeds even feeds of feeds
  32. it makes you think of feeds like in the telecom world
  33. data coming directly to you
  34. but we know that’s not how it works
  35. ? instead we have to go request the data
  36. then it gives it to us. and we do this over and over. are we there yet? are we there yet?
  37. ? feeds made sense in a world where feed readers ran on desktops that couldn’t be pushed to over http
  38. ? of course, now we have other web applications consuming feeds and it doesn’t make sense even our feed readers have become web applications
  39. evan and kellan gave a great talk about this, and their proposed solution: xmpp i have a condensed version of this talk. the slides speak for themselves
  40. (aka XMPP) they have a great point. polling sucks, and xmpp is a pretty good solution for data streams
  41. but it’s kind of heavy weight. it does a lot and makes a decently complex little system. luckily it’s not *that* hard to use with today’s library support
  42. joshua schachter responded to this talk in a blog post. i don’t know him, but he sounds like a smart guy
  43. “One solution that occurred to me at the time was to build a simple callback system over HTTP. This would fall comfortably between full polling and full persistent publish/subscribe.” i think you’re onto something joshua. i just don’t know about the name PIMP (or even Push RSS really). it *is* a nice place between polling and xmpp pubsub
  44. it’s worked for paypal...
  45. evan and kellan did point out there are extremes when it comes to data streams. most data streams will probably fall somewhere in between, but i do think xmpp is perfect for the fast and furious end
  46. microformats i’m a fan of microformats. not just in what they do, but how they do it. very ground up, grassroots... take existing popular use-patterns and make it a convention. like web hooks, microformats can be viewed as an alternative to something: xml+rdf
  47. xml+rdf vs microformats “Here's a new language we want you to learn, and now you need to output these additional files on your server. It's a hassle. (Microformats) lower the barrier to entry.” tantek is a big microformats evangelist. he says.... so i told him about web hooks. “what are they?” “push over http” “how are they diff than xmpp?” “they’re a lightweight alternative”
  48. xmpp vs web hooks “Good. XMPP needs a competitor.” he says... this was encouraging. i mean, when tantek talks, you listen... if for no other reason than
  49. he gets the chicks
  50. started spreading the word as “web hooks” and it started popping up places. this is a standard for discovering and subscribing to content changes. they use both web hooks and xmpp, which is a good sign. good idea, but standard specs alone don’t get very far
  51. gnip though. let me tell you about gnip... if we could just figure out what they do... ah, no, they’re on to something
  52. Polling they started with the goal to eliminate polling. Great!
  53. but they do a lot in several dimensions, so its hard to explain all that they do. notice they mention web hooks though... so i gotta figure out what they do.
  54. Source Destination Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer ok. so here’s what i found out. they’re an adaptor for data streams, letting publishers and consumers choose their format, protocol, and mechanism of choice various formats, polling or push using web hooks or xmpp (soon).
  55. Source Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer so for example, i want a digg data stream
  56. Source Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer they provide in rss over rest, which means polling
  57. Source Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer but i want web hooks with an atom payload. gnip makes it happen
  58. Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer same thing if twitter provides xmpp notifications, but i have rss polling infrastructure... gnip makes it happen
  59. Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer cases like with friendfeed (which doesn’t actually work with fb) say fb provides atom over rest, but friendfeed doesn’t find that efficient... they want xmpp gnip
  60. Protocol + Mechanism Protocol + Mechanism Format Format Web Hooks Web Hooks RSS RSS XMPP XMPP Atom Atom XML XML REST REST Publisher Consumer even something as redundant as polling atom on both ends, gnip offloads the polling stress from facebook (and adds filters, etc)
  61. Push is good. so the moral here is that push is good.
  62. XMPP is ideal when needed, but Web Hooks generally do the job. as far as xmpp vs web hooks, i think they both have their place.
  63. But push is not the point. so far, push has been about pushing content. this is not that interesting to me. i like functionality. and as simple as web hooks are, they have something xmpp doesn’t: simple code triggering
  64. Pipes i love this photo. even more than the cute kid pushing the car
  65. there once was a command line nav filesystem, launch apps, scripting environment. but it had an extra something special: pipes. letting you combine applications
  66. Input Output Program all from a bit of infrastructure involving input and output
  67. STDIN STDOUT Program STDERR stdin, stdout were available to reroute wherever the user wanted most common use was chaining commands together: piping
  68. xargs wget echo mail grep wc cat so you had all these simple little programs, that might not even be useful alone
  69. cat xargs wget echo mail grep wc string them together...
  70. cat grep xargs wget echo mail wc
  71. cat grep mail xargs wget echo wc and you have something more useful than the sum of the parts
  72. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface. this helped put forth the unix philosophy
  73. STDIN Program but it doesn’t work without the output. it just breaks.
  74. API Web App unfortunately that’s how the web is today. we can talk to web apps, but they really can’t talk to us. or anything else really.
  75. API Events Web App it’s not that they can’t, they just don’t. we need to start placing event hooks in.
  76. REST Hooks Web App those roles are best played by mechanisms that use the protocol the web is built on
  77. backhoe
  78. + front-loader + excavator
  79. cat grep mail Basecamp so we want to combine web applications like we can CLI programs. get more than the sum of the parts. web hooks open up this possibility, but need like APIs, need to be implemented
  80. Basecamp imagine basecamp with a bunch of hooks for events
  81. Basecamp Project finished Todo completed Milestone created Contact added File uploaded
  82. Basecamp My handler http://example.com/handler users can write handlers that are just web scripts. they have a url, and thats what you give basecamp
  83. Basecamp My handler http://example.com/handler it’s code. it can do anything from there. integrate with other services, make a phone call, order pizza, whatever
  84. Todos Basecamp for example, all these apps share data about todos. they each have respective specialized talents, but all work with todos. by putting hooks on todo CRUD, you can use their apis to keep them synced pretty well. magically. real-time.
  85. Service integration web hooks enable service integration
  86. Composability adding composability to web apps
  87. Code as glue based on the idea that web urls can run code. and code can do anything.
  88. when i first thought about this, cheap PHP hosting was all over, but it could be even simpler. there are paste bins like this one. made to share formatted code with people over IRC or email
  89. put in some code you want to share or ask a question about
  90. http://pastie.org/84826 hit save and you get a URL you can share when you ask “where’s the data stored?”
  91. i’m thinking of the same thing, but that you write handlers with
  92. http://pastie.org/run/24576 and saving doesn’t just give a url to view, but to run. pass that url into an app with web hooks
  93. Basecamp Project finished http://pastie.org/run/24576 for example, basecamp. now when you finish a project, everybody meets for shots in the break room.
  94. fortunately, we have this. it’s called appjet by ex googlers.
  95. just hit a button, write code, hit save, share the url. it’s javascript
  96. obviously app engine, although it’s a little more involved than appjet for quick handlers. but it is an option for python. and there are ruby/rails hosts like heroku
  97. one thing i’ve been working on is an extension to integrate these ideas.
  98. Hey, there’s an event hook here! by detecting some markup in a page, it discovers hooks. like say for new photos from contacts. you want to do something when that happens, click it
  99. Save and write some code. hit save, it posts to AppJet (or wherever), registers the handler (assuming a standard protocol), and done. all inline. go back and change the code.
  100. Real world examples but these are all mockups and what-ifs... there is a world of web hooks already evolving...
  101. i started by exposing svn hooks as web hooks in devjavu
  102. i talked about web hooks enough using pbwiki as an example, their mysterious cto decided to implement them
  103. and apparently really liked what he found
  104. went all out on hooked events. not sure if it’s made it to production, but really cool
  105. github though. they had a push hook. in fact, they linked to my blog post from their homepage for a long time.
  106. they’ve been doing really well with web hooks. we’ll come back to them...
  107. “Building projects with web hooks in mind lets me keep the core Lighthouse source focused, while external services live in their own libraries.” --Rick Olson from there the idea silently spread to other rails guys. rick olson used them in lighthouse
  108. “We implemented web hooks a while ago and people have been building all sorts of unexpected stuff on top of it.” --Tobias Lütke tobias used them in shopify. i’m told he’s revamping their api to have more hooks
  109. and back to github. they were so successful with the adhoc integration, they formalized it. but in the best way! using their existing web hook infrastructure. they just have modules running in a separate but local web service.
  110. in fact, that lets them open source it. letting people fork, write new handlers, and push back. this is probably going to be the standard model of service integration.
  111. and a great example of services integrated with github, besides lighthouse, is runcoderun. they run your regression tests for you. continuous integration in the sky. love it. they sign you up automatically if you put their hook in github.
  112. then there’s martyn and andy. two guys in the uk that love web hooks. they built this thing called spaghetti junction at a hackday. it involved into...
  113. switchub. i REALLY love this. i knew this sort of thing would emerge, but i didn’t think it would happen until web hooks were more popular. kind of like the pastinbin code runner, they let you create hook inputs with urls to put in apps that you can route to various output handlers: email, irc, etc
  114. my example switchboard. this kind of feels like gnip, only more focused and more about web hooks. so i like it lots.
  115. opening handlers up like github. anybody can write handlers soon. working with them a little to make it real awesome.
  116. for example, i suggested rss as an input, but that would require polling. well distribute it! let somebody like rssfwd implement hooks and use them. wow, what other services could you build around switchub?
  117. switchub is more of how i envisioned piping on the web. yahoo pipes was a great experiment, but it’s not real pipes. no integration. only aggregation.
  118. i visualize it more like this. reason: virtual rack mounts
  119. flip it around and wire them together however you like. totally cool.
  120. and of course i mentioned paypal. but i should mention, web hooks make so much sense for paypal... they’re not so much about pushing content, but INTEGRATING. that’s what web hooks are great for, even though they can be used for content push.
  121. jott is another example of a web hook implementer that doesn’t know it. they parse voice over the phone and do stuff with it, like post to twitter, etc
  122. they do it with “Links”... which are just hooks. they post to a script that does something with the parsed text. really cool for todos.
  123. User jotts to The message is Message is sent via Jott reads back the User receives a Jott Link converted HTTP Post to a response and sends information back into text web page it via SMS & SMTP here’s their diagram. totally web hooks.
  124. so, thinking back to switchub, and like jott, there’s a lot of cool ideas for something to web hook services. I made mailhook to parse incoming email and trigger scripts to handle it. very useful.
  125. GAE community made one because GAE doesn’t have a way to accept email. web hooks were the obvious solution.
  126. rick olson has an open source non-hosted ruby version that will do xmpp. he uses it for lighthouse.
  127. but smtp2web is interesting because it was made because of the limitations of GAE...
  128. in fact a lot of people made these kinds of “micro webservices” to do simple things GAE didn’t do.
  129. http://movq.net here’s a couple from a site i found. they have a cool cron service ... should be useful in the web hooks ecosystem
  130. making things more web friendly... working with lisa dussault to make a IMAP to REST bridge...
  131. this makes working with email mailboxes way easier in the context of the web
  132. it’s neat to see it in netnewswire. looks like mail.app point is to make more protocols easier to work with from web scripts in fairly limited environments... because there will be more of them as the cloud grows
  133. Write services that do one thing and do it well. Write services to work together. Write services that interact with HTTP, because that is simple + ubiquitous ...and it’s already in your stack. but these micro webservices are like the tiny CLI programs that aren’t very useful by themselves. but they need a means to interact with other apps, and web hooks have been the obvious solution. so i’d like to start pushing these tenets, similar to the unix philosophy
  134. jon udell talks about websites as data sources that can be reused and remixed today that idea isn’t very novel
  135. “a new programming paradigm that takes the whole Internet as its platform” he envisions the Internet (and I’ll say the web) as a programming paradigm. i’d say also an OS, but that’s for another time. but it won’t be true until apps are composable and easily integratable.
  136. that’s the future i see though.
  137. Plugins there’s one more thing i want to talk about.
  138. web was a bunch of pages linked together.
  139. but people kept wanting to access other things through the web (like me today)
  140. so they developed cgi
  141. tangent: this is a neat find. was on reddit. andreessen proposing IMG tag. people fought it, said it needed to be more generalized. he just put it on mosaic and that was that
  142. so these pages... today... because of cgi
  143. are actually the result
  144. of these higher order nodes... the code... the apps. this is most of the web today. neat how that evolved
  145. so you have these applications
  146. and the difference you might think is backend and frontend. but there is a subtly different way to think about it
  147. Logic Content logic and content. the read-write web gave us user contributed content... i want user contributed (democratized) logic.
  148. Logic Content not just integrating and composing apps
  149. Logic Content but extending apps...
  150. almost called this section Platforms. platforms are really cool. we all love them. i LOVE them, so fb platform was really cool. asked a friend how it worked. he said “web hooks”
  151. sure enough, this looks like web hooks to me. as long as it’s http, calling out... but then using the results in their app? thats different...
  152. in fact a few people have used web hooks for plugins. dabble is a great example.
  153. they do online databased for people that use excel as a database.
  154. their plugin API is great. it uses web hooks!
  155. “Dabble plugins allow Dabble applications to create new, derived fields by calling out to external HTTP-accessible applications. This solves the problem of safely enabling extension of a centrally-located hosted application, in that, while you’re writing code to extend and enhance the behavior of a Dabble application, your code never actually runs inside Dabble.” [General] Name = Amazon Sales Rank [Sales Rank by ISBN] URL = http://chadfowler.com/dabble/amazon_sales_rank.cgi Input = Text Output = Number only they have an extra layer for meta data. but that’s a cool pattern.
  156. “If you’ve used a UNIX-based operating system, you’re probably familiar with the notion of pipes. The output of one program is piped into the input of another, creating a filter chain. This is conceptually the same as the way Dabble’s plugin IO works. Nice and simple.” of course, they compare it to pipes. the simplicity. the natural fit of it.
  157. of course, i think they should have web hooks for all their standard CRUD events... this way their database apps can integrate (like PayPal) with the rest of your workflow
  158. in fact, all these “app platforms” like coghead and salesforce should have web hooks. that would make them more useful, less silo’d off into just processing data in their world
  159. here’s a little microplatform i made last month. a twitter bot platform using web hooks. in fact, i built it with web hooks... using mailhook and appjet.
  160. here’s the code.
  161. you just register hooks, give them a name, and DM tdo with the command and arguments.
  162. IMified uses web hooks. sells the tech too: “allows anyone with basic web programming skills to quickly and easily create ...”
  163. General Systems Theory close by dropping some GST on you
  164. General Systems Theory central tenet is value is not in the elements or parts of a system
  165. General Systems Theory the real value is in the interactions, how they work together. this creates the emergent phenomenon of a system, and defines its behavior
  166. Degrees of freedom increase the ways to work together, the means of combination, increases the DoF
  167. Increase possibility space uncover new opportunities in business, tools, and empowerment
  168. “a new programming paradigm that takes the whole Internet as its platform” sounds cool
  169. Web APIs half way there
  170. Web APIs Web Hooks not hard to go the rest of the way
  171. http://flickr.com/photos/nikonfans/439432049/ http://flickr.com/photos/omegaman/477866054/ http://flickr.com/photos/aquan/2780542698/ http://flickr.com/photos/lucky_13/191038503/ http://flickr.com/photos/narwhal85/1290912011/ http://flickr.com/photos/thomashawk/521532598/ http://flickr.com/photos/bendodson/2601002535/ http://flickr.com/photos/ntr23/218966763/ Thanks! progrium@gmail.com progrium.com
Advertisement