InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Applying REST Principles to Complex Applications

Posted by Stefan Tilkov on Jun 18, 2007

Sections
Architecture & Design,
Enterprise Architecture
Topics
Web Services ,
REST ,
Architecture ,
SOA
Tags
Design Patterns
In a blog post, Joe Gregorio, well-known blogger and author of the excellent XML.com series on REST, shows how to apply REST design principles to a complex application -- the Apache DayTrader benchmark.

DayTrader, originally developed by IBM as the Trade Performance Benchmark Sample, is an example online stock trading application that was donated to the Apache Geronimo community in 2005. The application supports use cases such as login, view portfolio, lookup stock quotes, and buy or sell stock shares.

The article shows how to map the business operations supported by DayTrader to resources, each identified by its own URI and supporting the uniform HTTP interface. While the core functionality maps to a REST model quite naturally (roughly 20 operations end up being mapped to 5 "collection resources"), some more work is required to support reliable delivery of orders.

To support this, Joe introduces a pending_orders collection, where orders are first created via POST and then invidually updated using PUT. As the PUT operation is idempotent, it can be retried if the result is unclear without causing unwanted effects (in this case, submitting the same order twice).

This method  to support reliability is not standardized -- at least not beyond the level provided by HTTP. In addition to the ad-hoc solution introduced in the posting, Joe references HTTPLR, a proposal by Bill de hÓra, Mark Nottingham's POE (POST Once Exactly) and Paul Prescod's Reliable Delivery in HTTP. (Another entry worth pointing to is Yaron Goland's SOA-Rity).

The posting concludes:
Hopefullly what you will take away from this example is not the explicit utility of building a RESTful interface to DayTrader, but that REST can be applied to complex scenarios, that the collection model can make such modelling easier, and that HTTP does offer mechanisms for reliability. I hope it goes without saying that now that you have a RESTful interface you can start taking advantage of other HTTP mechanisms like caching, etags, and gzip.
  • This article is part of a featured topic series on SOA

No comments

Watch Thread Reply

Educational Content

Jesper Boeg on Priming Kanban

In this interview, Jesper Boeg, author of the new InfoQ book – Priming Kanban, discusses the keys to using Kanban effectively, and how to get started if you are currently using other approaches.

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.