The QCon REST track, as many of the speaker and attendees have blogged, was simply excellent, not a single dud talk all day.
Having said that, there were three stand-out themes that emerged for me during the day, and a couple of insanely bright light-bulb moments. Chronologically:
Ian Robinson's discussion of media types during his Atom and AtomPub talk, characterised by a slide entitled "You've Chosen application/xml, you b*st*rd." Ian laid out the notion of preferring hypermedia types over non-hypermedia types (e.g. prefer xhtml over xml) because they enable further processing without resorting to specialised dispatchers. For example, if you get an Atom representation, then you automatically understand (globally) how to interpret the atom:link links within; with a custom hypermedia type (for Ian, Savas and me writing a Web book, this is application/restbucks+xml) you automatically understand (within the Restbucks context) how to interpret links; but for application/xml you have no idea how to extract hypermedia controls unless you have some prior knowledge of the schema. Genius.
Steve Vinoski's YAWS and Erlang talk was marked by its simplicity. Steve didn't try to give us enough Erlang, YAWS, and REST to understand the whole picture, but enough from each to get us going for simpler applications. I felt that I could get a simple Erlang Web project off the ground after just an hour of Steve's time, which was marvelous.
Leonard Richardson gave a hilarious and timely talk on his real-world experiences of building RESTful services. As you'd expect it was all good stuff, but what really caught my attention was Leonard's taxonomy for services:
- Level 0 - One URI one HTTP method - e.g. SOAP
- Level 1 - Many URIs, one HTTP method - e.g. most RESTful services that aren't (still loved, because people love URIs)
- Level 2 - Many URIs, each with multiple HTTP methods - e.g. Amazon S3
- Level 3 - Resources describe their own capabilities and interconnections - e.g. AtomPub
What Leonard's effectively saying is that you can judge the maturity of a service crudely, by seeing how far it goes up the stack: URI->HTTP->Hypermedia which is a really useful mental framework.
All the slides will appear on the InfoQ site in the near future, as will the talks since they were all caught on video. Until then I've capture stream-of-consciousness style set of reports (inspired by Stefan Tilkov's raw unedited notes format) which will be appearing here shortly.