Donald posted a lovely, concise recommendation (on rest-discuss) about how to structure REST URLs which looks *remarkably* like what Rails does (or will do, or maybe ought to do :-) by default. He gave me permission to share it here, and I've added it to the wiki:

http://microformats.org/wiki/rest/urls

I like that. The only slight problem is how to automate the singular/ plural distinction. The current rules for a REST look are:

map.connect ':controller/:action', :action => 'index', :requirements => { :action => /[^\d]+/ } map.connect ':controller/:id', :action => 'show', :requirements => { :id => /[\d]+/ }
  map.connect  ':controller/:id/:action'

But that will either translate into widgets/ or widget/ -- not both. It would probably take a Routing patch to figure out a way to represent it all succinctly. Or, you could of course also just use the power of Ruby:

for entity in %( posts comments authors )
map.send entity, "#{entity}/:action", :action => 'index', :requirements => { :action => /[^\d]+/ } map.send entity.singularize, "#{entity.singularize}/:id", :action => 'show', :requirements => { :id => /[\d]+/ }
  map.send entity.singularize, "#{entity.singularize}/:id/:action"
end

And riddle me this, we could wrap it up in this extension:

Module RestRoutes
  def connect_entity(entity)
    entity = entity.to_s
    collection = entity.pluralize

named_route(collection, "#{collection}/:action", :action => 'index', :requirements => { :action => /[^\d]+/ }) named_route(entity , "#{entity}/:id", :controller => collection, :action => 'show', :requirements => { :id => /[\d]+/ }) named_route(entity , "#{entity}/:id/:action", :controller => collection)
  end
end

ActionController::Routing::RouteSet.send :include, RestRoutes

...which would then allow you to do:

ActionController::Routing::Routes.draw do |map|
  map.connect_entity :post
  map.connect_entity :comments
end

I see the makings of a RESTifarian plugin shape up quickly ;)
--
David Heinemeier Hansson
http://www.37signals.com    -- Basecamp, Backpack, Writeboard, Tada
http://www.loudthinking.com -- Broadcasting Brain
http://www.rubyonrails.com  -- Web-application framework


_______________________________________________
microformats-rest mailing list
[EMAIL PROTECTED]
http://microformats.org/mailman/listinfo/microformats-rest

Reply via email to