Restful design is a headache?

Hi,

So i really, really want to do restful rails. I’ve got the Peepcode
screencast, read the tutorials, etc.

BUT - I still don’t get it. The problem is, tutorials only cover the
basic stuff, and none of the application design elements.

For example, I have a shop. The shop has products. The products can only
be edited by an admin. So I scaffold products, and password protect the
lot, that’s my admin area done. Now I create a shop and I want to ‘view’
products. Oh wait, that’s in products already, and that’s not one of the
‘restful 7’.

I’m completely confused. What about resetting a password? Do I have to
create a new reset_password resource?

Any pointer would be much, much appreciated.

Thank you!

view one = show, view many = index, whether its the admin viewing
products, or a user viewing products, there’s just one HTTP verb and url
pattern in use…
/products/ as a GET request.

If it were /products/ as a POST request, it better be accompanied by
sufficient parameters to define the new product resource, since that’s a
RESTful create request pattern.

The basis of REST is the four HTTP ‘verbs’ GET, PUT, POST, DELETE.

Rails scaffolding builds REST out with ‘standard’ methods of:

index, show, new, edit, create, update, destroy

which pair a url pattern with one of the four HTTP request types

index:
/plural_resource_name/ + GET - return a collection of the desired
resource

create:
/plural_resource_name/ + POST - create a new instance of the resource

new:
/plural_resource_name/new + GET - return a new instance of the resource

show:
/plural_resource_name/id + GET - return a single instance of the
resource

update:
/plural_resource_name/id + PUT - update a single instance of the
resource

destroy:
/plural_resource_name/id + DELETE - destroy a single instance of the
resource

I guess there isn’t much information on this, but you might want to
look at well written source code for inspiration.

From my experience (which isn’t much), your routing table should look
something like:

map.resources :shops, :has_many => [:products], :shallow => true

map.resources :products, :controller => “manage_products”

This means that you will have 3 controllers; one for shops and two for
products.

One product controller will be used for showing and will be accessed
as a nested resource of shops. The other will act as a stand alone
resource, but will be password protected.

This may not be the best design for your needs, but I hope you can
improve on it.

I think the problem may actually be that he’s after application
architecture tutorials in rails, and most rails tutes take it for
granted you have somewhat of a grasp on big picture scenarios.

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/

BUT - I still don’t get it. The problem is, tutorials only cover the
basic stuff, and none of the application design elements.

I think a lot of the confusion around REST is that it really is, in
the practical context of building a rails app anyway, almost too
simple. That simplicity forces us to rethink how we’ve solved
problems in the past. And breaking those old thought patterns is what
is hard.

This presentation really helped me get my mind around it. I’m not
sure if DHH actually mentions REST in this video but the concepts are
there.

good luck!