BT

Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ

Topics

Choose your language

InfoQ Homepage News How RESTful Are Web Frameworks That Claim REST Support?

How RESTful Are Web Frameworks That Claim REST Support?

This item in japanese

Bookmarks

There are plenty of web services platforms/application frameworks available today that support RESTful services to varying degrees. In a recent post Stefan Tilkov puts out a list of criteria that serves as a starting point in evaluating these frameworks and platforms.

He Proposes that, at a high level, the questions one must ask are are (the more “yes”s for the answers the closer a framework is to an ideal REST web application framework).

    • Does the framework respect that an HTTP message does not only consist of a URI? I.e., is dispatch done at least based on the HTTP verb, the URI, the Content-type and Accept headers?
    • Can I easily use the same business logic while returning different content types in the response?
    • Is there support for checking for conditional requests?
    • Are ETags calculated automatically if none are set by the backend logic?
    • Can I (as a framework user) easily read all HTTP request headers?
    • Can I easily set all HTTP response headers?
    • Can I use custom HTTP verbs?
    • Is it obvious and easy how to return correct status codes with responses, and does the framework use them correctly (if it does so at all)?

Mike Amundsen suggests additions to the REST Litmus Test for Web Frameworks list, He suggests that the various components of a URI the path and the query string, carry the same weight to distinguish a resource from another. He quotes Roy T. Fielding on REST-Discuss, 2002,

[F]or server-constructed URI, there is no effective difference between query and path info -- both distinguish a resource.

A few prominent web frameworks that support developing RESTful services are:

Java

.net

Ruby

Python

Do add your comments so we can maintain an updated list of frameworks and platforms for building RESTful services. Be sure to visit  the original post for details.

Rate this Article

Adoption
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Community comments

  • Same initiative

    by Alex Popescu,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    After reading Stefan's post I've had the same initiative asking around what web frameworks are really passing this test. So, far the answers I've got are:

    - JAX-RS implementations
    - webmachine (Erlang/Basho)

    While I'm not very familiar with either Django and Ruby on Rails, as far as I know both of them will have problems with at least the 1st test (and I think Django is not passing the 2nd test either, as it is more of an action based framework).

    :- alex

  • another one

    by lo vuikeng,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    Don't forget SpringMVC 3.0

  • Re: Same initiative

    by James Watson,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I'm a big fan of JAX-RS (Jersey). I'd even want to use it to implement non-restful services. It's really quite nice.

  • Apache CXF

    by David Karr,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I find Apache CXF to be a very good JAX-RS implementation (it also provides a JAX-WS implementation).

  • Re: another one

    by Dilip Krishnan,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    Thanks! updated the post.

  • What about HATEOS?

    by Michael Pilone,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I would suggest adding HATEOS support to the list of REST framework criteria. I haven't seen a good framework yet that easily supports the idea of returning URIs to other resources without requiring you to write custom views that render your internal domain objects to "restful" responses. The Restfulie GEM in RoR is at least trying to provide an implementation but it isn't there yet.

    For example, look at something like the Netflix API which appears to support HATEOS very well. I'm assuming they implemented a lot of custom code internally to get that behavior.

    -mike

  • Re: What about HATEOS?

    by Shimon Amit,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    Excellent point.

  • Re: What about HATEOS?

    by Tero Vaananen,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    Resfulie supports HATEOAS.

  • Lift Framework?

    by Jim K,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I'm surprised no one has mentioned Lift yet.

  • Re: What about HATEOS?

    by James Watson,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I'm interested in seeing how they approach this but something went wrong. They are sorry.

    restfulie.caelum.com.br/restful_java

  • RESTx

    by Ross Mason,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I just wanted to point out that RESTx is both Java and Python. Developers can write components (that can be used to create resources) in both languages and we're looking to add support for Groovy and Ruby, plus a JavaScript client.

    It is still early days for the project but would love to get your feedback on it.

    Ross (at mulesoft dot com)

  • Re: What about HATEOS?

    by Juergen Brendel,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    RESTx does support HATEAOS. It does so in two ways: First, all the components and resources on a server can be discovered just by following links. Secondly, component authors may use a built-in facility to store items, which can be viewed as a collection. If so desired, a request to this collection returns a list of all resources. When a new resource is created, the "202 Created" response is returned with a link to the new resource.

  • Re: What about HATEOS?

    by Julian Browne,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    I'm interested in seeing how they approach this but something went wrong. They are sorry.

    restfulie.caelum.com.br/restful_java


    Though, to be fair, they will take a look at it shortly.

  • Re: What about HATEOS?

    by Rafael de F. Ferreira,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    RESTfulie java can be found at:

    github.com/caelum/restfulie-java#readme

  • Re: Spring MVC's REST Capabilities

    by Keith Donald,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    If you'd like to see how Spring MVC stacks up, checkout the following showcase:

    blog.springsource.com/2010/07/22/spring-mvc-3-s...

    Keith

  • Re: What about HATEOS?

    by Guilherme Silveira,

    Your message is awaiting moderation. Thank you for participating in the discussion.

    The link is an old one, where did you find it so we can update it?

    Regards

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

BT