RESTful interfaces... question.

Hi,

*** I’m going to preface this comment/question with a disclaimer: I’m really annoyed at this particular second with the buzzwordy-nature of “REST”, at least in the context of the information I’ve found about it

online. It seems to be an abstract concept that people only pretend they understand, but they really don’t, so they throw around all of the same jargon–on pretty much EVERY site about it–as everyone else, when

in reality they don’t really know why they like it or exactly what its requirements are. Maybe I’m wrong, but that’s my impression and that’s why I’m annoyed. ***

Okay. In order to simplify my post, let’s just pretend I’m developing a

lightweight social networking site, and I have Users and UserProfiles (with the obvious has_one association). Is it considered “RESTful” if I have these following routes? Is the “RESTful” requirement simply that

there is some cacheable URI for each thing for each of the CRUD operations?

I would really recommend checking out RESTful Web Services by Leonard Richardson and Sam Ruby. It clarifies the subject material quite well.

http://www.oreilly.com/catalog/9780596529260/index.html

In order to really understand the nature of REST you need to put it up against the alternative.

Here is a link to what convinced me: http://www.wanderingbarque.com/nonintersecting/2006/11/15/the-s-stands-for-simple/

You could nest them and do something like users/1/profile

--Jeremy

As far as I'm concerned draw the line anywhere you see fit. If you want a User that has one or many UserProfiles then have at it. In that case you may want to consider making UserProfile a nested resource of User, if the case is that UserProfile doesn't make sense on it's own without being scoped by User. Then you would have a URL like /users/1/ user_profiles/1 if your getting a single resource or /users/1/ user_profiles if your getting the collection. Assuming you're using the GET method. If you use POST to /users/1/user_profiles then you would be create a new UserProfile under the User. Of course you'll also need to make sure you controller actions are setup properly to assign the new UserProfile to the User.

I don't really see what you feel is so limiting about the RESTful URL. They are far "prettier" than the traditional ones. Besides that there is nothing stopping you from using standard or named routes wherever they make sense. REST adds to Rails, it doesn't really limit it in any way that I can see.