Recently there’s been a bunch of discussion about Leonard Richardson’s maturity model and how some folks use it as a tool measurement for restfulness. Subbu has a nice post on this here where he says it is basically pointless to use RMM to evaluate restfulness. It encourages folks to build systems with a conformist attitude rather than really evaluating the needs of the system and designing to met those constraints. Mike Amundsen replied saying that he sees value in using RMM from a retrospective sense but not as part of the up-front analysis of a system. If you’ve watched any of my recent talks you may have seen me talk about the Richardson Model. At my talk on REST at DevDays 2011 I spoke about it quite in depth.
A few quick thoughts on RMM
I use RMM as an educational tool to talk about different styles of exposing systems over HTTP as well as the tradeoffs.
For example at Level 0 you are commonly tunneling all traffic over a single HTTP method and a single URI. This means that you lose the benefits of intermediaries like caching severs as you are either not using methods that caching servers care about, or you are using methods they do care about, but in a way that has adverse side effects like poisoning the cache.
There are other tradeoffs with Level 0 like losing visibility in that all the semantics are buried in the payload further pushing constraints on which clients can work with your system. On the benefit side you can say that Level 0 maps very well for doing remote procedure calls as the wire format can map very closely to describing the invocation of a method. Hence the reason it is so widely used.
In the same way you can look at each of the levels and their respective tradeoffs and benefits to help you in thinking through the design of your system.
RMM (in my opinion) is a tool for thinking about design, tradeoffs and benefits, not a checklist.