The Richardson Maturity Model of REST… and Roy Fielding

Every now and then someone brings up the Richardson Maturity Model of REST, and tries to support an argument by promising a promotion up to a higher level, or else threatening a demotion to a lower level.

The maturity model goes like this. At level one, you introduce addressable resources. At level two, you use HTTP verbs strictly. Finally level three is where you use hypermedia, and you are at REST.

Martin Fowler, who is awesome, has this page that describes it:

Unfortunately, Roy Fielding, who came up with the idea and the term of REST, had this to say:

So, by Roy’s strict criteria, hypermedia is a *precondition* of REST. Anything else should not call itself REST. So the maturity model actually looks like this:

Level One : not REST
Level Two : not REST
Level Three : REST

That’s why I’ve been realizing more and more that the last three years have been a big waste spinning circles around URIs and verbs. Spending time to graduate to level one or two of the maturity model is a huge waste of time, because if you want to be RESTful, you have to start at level three. Hypermedia is a constraint — it’s a precondition to getting into the REST stadium.



Filed under computer architecture, REST

13 responses to “The Richardson Maturity Model of REST… and Roy Fielding

  1. You’re absolutely accurate – RESTful is strictly level 3.

    However, useful really starts at level 2, just like Amazon’s S3 service.


  2. roby2358

    Good comment, thank you!

    More and more, it just seems like we’re having discussions about all the wrong things. It seems to me we should be either having a good discussion about useful APIs closely tailored to HTTP, or else having good discussions about using hypermedia. πŸ˜‰ Instead I find myself in a lot of arguments about what REST *is*. LOL

  3. guilhermesilveira

    Perfect. And its a tradeoff as with any other arch/design choice. You might want or not want to use hypermedia… but the buzzword REST as in (REST-hypermedia) will be there forever.

    • roby2358

      lol too true. There’s all this talk of “…-driven development”. Around here it’s all BDD: “Buzzword-driven development.” πŸ˜‰

  4. Pingback: Distributed Weekly 93 — Scott Banwart's Blog

  5. Alex Young

    The thing is, if you miss out *any* of the RMM levels, you end up with something that isn’t REST (although I’d replace “HTTP verbs” with “a small set of predefined, globally agreed verbs”).

    In terms of implementation, you can’t be at level 3 without having gone through level 1, so I think the order makes sense.

    • roby2358

      Ya, I agree. Good point about “HTTP verbs”, and looking at my last paragraph, I think I overstated my case. πŸ˜‰ It just seems like I’ve been in too many conversations lately that have gotten derailed by what we imagine the requirements of levels 1 and 2 to be, so I’m getting kind of cranky about that.

  6. Pingback: How do you measure the RESTful-ness of an application? | ITPark

  7. John Brown

    Sure there is a lot of controversy over labels, but from reading the comments on Roy’s posts, I did learn some things:
    – determining allowable HTTP methods on resources is a waste of time because the constraint really has to do with the transition points on the representation.
    – While the intent is to make REST simple for the client to use, that makes it “MORE DIFFICULT” to design and develop well as opposed to hearing from groups about how easier it is (probably because they are not at level 3 yet).
    – Taking out any of the attributes for the architectural style that was harvested from the WWW limits the advantages (in terms of scale and flexibility) that was found in the 1st successful REST implementation.

  8. Pingback: SOA Foundation Training – parte 04 « joaopaulomelo

  9. Pingback: Why hypermedia APIs? – Jayway

  10. Pingback: SOAP vs REST: Two Opposing Perspectives | Open Source Missions

  11. It seems to me, while agreeing to the point that REST doesn’t necessarily mean HTTP, Roy Fielding was just saying that for APIs which anyway are trying to reuse HTTP i.e. using it as a guideline. At least I hope so, and his original dissertation should prove my point. But he made himself easy to be misunderstood by the post your referring to.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s