I was fortunate enough to be able to attend RESTFest in Greenville, South Carolina on the 13th, 14th and 15th September 2012. RESTFest is an un-conference organised by Mike Amundsen and Benjamin Young, and this is the third year it has run at Greenville.
An un-conference invites attendees to talk on any subject they choose amongst peers and some of the most experienced people in the community in a very relaxed, informal atmosphere. It provides an opportunity to spend three days immersed in discussions about REST and hear about real world Hypermedia APIs. The idea - everybody talks and everybody listens.
Day one was a hack day organised and run by David Zülke. David provided a custom hypermedia type capable of representing a help desk containing users, tickets and comments. He also provided ideas for possible applications that could use the hypermedia type. These ranged from the obvious client / server combination (servers using a custom storage vs servers using an existing ticket storage), to intermediary servers that were capable of enhancing the media type with search capabilities, an automated test client and an XML to JSON proxy.
We split up into teams and 'flew blind' for the first few hours whilst we build up our applications. Once we started getting enough features implemented, we started to be able to interact with each others apps using the common language of the hypermedia type. It was really impressive to see the fruits of the days labours prove to have been worth it - with a quite feature-full help desk application suite having been produced, driven by Hypermedia.
It was particularly pleasing to see a client written in Ruby successfully talking to a server written in PHP using GitHub Issues as a storage medium. The same client could also talk to a second server written on a different platform with its own custom storage engine. A true example of why arguments about language X being better or worse than language Y are left being irrelevant when language neutral constructs are used to bridge the gap between them.
The exercise was a demonstration of the level of interoperability that following the constraints of REST bring to an application system, and the realisation that intermediaries (servers that proxy requests between the client and server end point) can not only cache requests to help an application scale up, but can also enhance the product by decorating the hypermedia type with new link relations and adding extra functionality.
The following two days were filled with 90 minute workshop sessions and lightning talks. Darrel Miller kicked off day two with his presentation on "The 7 R's of Hypermedia", exploring the practical use of Hypermedia through seven scenarios where it can be used within distributed applications: Relations, Resources, Reference Data, Restriction, Re-Distribution, Reduction, and Reactive. Video.
Pat Cappelaere of the NASA SensorWeb project followed with his work shop on "User Stories and Acceptance Criteria for RESTful Services", demonstrating the RIP (REST Interface Policy) checker, http://rip.jit.su. This is an app that assesses and reports on RESTful services using a continuously updated set of user stories and acceptance criteria to assess the level of compliance of the service against the Richardson maturity model.
The talk and application (RIP) was a great example of the potential of using standard hypermedia types and the benefits of using them in an api over a custom type that only one client is capable of understanding. Video.
Next up was Mike Amundsen, with his amusing run through of the constraints of REST, "REST-like Wisdom from Celebrity Internet Memes". From Inigo Montoya to Yoda, it was a fun walk through of the do's and don'ts of services on the web and provided an entertaining talk to follow lunch. Video.
After Mike was the start of the first session of lightning talks - these run from 5 to 15 minutes in length (the longer ones usually due to active conversation after a short presentation introducing the topic). These give people an opportunity to present anything they want, from a recent Hypermedia project they have been involved in to a monitoring system for performance analysis in front of a targeted audience of REST/Hypermedia professionals, an audience that could only be found at an event like this! Great discussion and everyone who presented could take away a lot from the experience.
I presented some options for how to represent the changing state of resources with Hypermedia. This is a topic that keeps cropping up for me and I solve it in a new way, almost every time I come up against it. The social events with the group once the conference day was done also provided opportunity to discuss the lightning talks and new ideas over a beer in a more relaxed atmosphere.
The day rounded off with a keynote presentation from Stuart Charlton titled 'Linking Data and Actions on the Web', in which Stuart introduced ideas for introducing the concept of Linked Behaviour Trees to the design of REST API's. This was a fascinating exploration of advancing the art of RESTful APIs, and left everyones mind reeling - especially after a full day of other great talks on the subject! Definitely one that I will need to watch for a second time to full absorb what was said and i'm looking forward to seeing the video again once it's made available. Video.
The following day was kicked of by a really great featured talk by Leonard Richardson (creator of the Richardson Maturity Model, which he introduced at a QCon talk in '08), titled 'How to Follow Instructions'. Well worth a watch, even if just for the excerpt on Native Language Bindings; 'Native Language Bindings [for REST APIs] are generally bad. Not like poisonous snakes are bad… but like fast food restaurants in neighbourhoods that don't have grocery stores are bad. They're compensating for a failure earlier in the process. [snip] And it can be really tasty, but just wait six months after you eat one of these every day!'. Very humorous talk from a well respected author and speaker in the industry. Video.
Pat Cappelaere spoke for a second time on 'RESTful Patterns for [OGC] Enterprise Services', a dive into what patterns are used in a network of millions of sensors, both in orbit (satellite) and at ground level, to bring them together and make them accessible to both humans and machines. This followed his earlier talk on RIP, and how the SensorWeb team are using it to drive the definition of the Enterprise Patterns they use today. Video.
Matt Bishop followed Pat with his talk titled 'HATEOAS Your Cake and Eat It Too', a walk through of how Matt and his team at Elastic Path turned a complex e-commerce process into a Hypertext driven API, and how a true Hypermedia driven api (Level 3 of the Richardson Maturity Model) can only be successful if it's based on real world (reality) concepts rather than the existing services that it's built on. He goes through some of the common misconceptions of what constitutes L3 that they have come up against during their journey towards L3, including "L3 is HTTP used correctly" and "Content-Type is the Hypermedia-Type" where he introduces the concept that the Content-Type (xml or json) is actually different from the Hypermedia-Type (atom / hal / etc). One of the most interesting ideas he introduced was the 'Zoom' functionality of the framework they built - a way of expanding out responses with many directly related resources in a single request to avoid making client to have to make many requests to the server, something that the HAL media type specification supports natively through embedded resources. Video.
The final featured talk of the conference was by Sam Ramji of Apigee, on 'Architecting for performance with devices & APIs', with some lessons learned from the history of computing on low bandwidth, high latency networks now that we're moving back towards that world with the popularisation of mobile devices. HTTP APIs are the heart of most applications we run on mobile devices so taking consideration of the network on which the data will be transmitted over is essential to the success of the API project. He introduces the idea that from the perspective of the mobile client, the Internet is a database, and that the API is the modern day equivalent of writing stored procedures on the database to optimise it. Sam included some enlightening tips on how 3G devices work, and how a 'chatty' API can cause a serious drain on battery powered mobile devices. Video.
The remainder of the conference day was filled with lightning talks on a variety of subjects from 'How to be a better Condescender-er' to people introducing new tools they have been developing or working with and new ideas for advancing the art of Restful API design. The lightning talks are all available to watch on the RESTFest vimeo channel.
All in all it was an excellent three days in Greenville. I personally came away with new ideas and thoughts on the 'right' way of doing things when designing Hypermedia systems and had the chance to meet and talk with many of the people I have known through various online forums.
Thank you to the organisers, Mike Amundsen and Benjamin Young for putting together the event and to the sponsors for making it all possible. The food during the day and social events in the evening were all a great success.
We (Inviqa) are putting together a training course on creating RESTful Hypermedia Application which will become available from December. It will cover Service Oriented Architecture and a recap of HTTP, the concept and constraints of the REST architectural style and how it's evolving, and of course - the role that Hypermedia plays in all of this - and an opportunity to practice these concepts in a training environment. Get in touch if you want to know more.