Ara.T.Howard
2005-Dec-04  19:42 UTC
restful interfaces and preserving PATH_INFO in custom dispatch/route
i''m working on a restful interface to existing models in an app. 
ideally i''d
like to preserve the existing dispatch mechanism and support a parrallel one
that looks like
   http://0.0.0.0/rest/mime/model/id
to do this i''d like to setup a rest controller which dispatches based
on the
http request method and path into.  for example, a get sent to
   http://0.0.0.0/rest/xml/student/42
returns xml for student(s) with id 42.  a post of xml to
   http://0.0.0.0/rest/xml/student/42
updates the record via a xml doc.  of course i''ll never use these and
will
prefer
   http://0.0.0.0/rest/yaml/student/42
;-)
because i want to preserve the default rails dispatching mechanism and isolate
all rest code into a single controller, thereby enabling the site to be rest
enables for various formats with the addition of a single controller and no
other code modification.  the tricky bit is
   - how to configure rails such that the path_info (/student/42) is preserved
   - how to reuse as much of the existing route/dispaching code as possible to
     handle parsing this path_info
any hints appreciated.
-a
-- 
==============================================================================|
ara [dot] t [dot] howard [at] noaa [dot] gov
| all happiness comes from the desire for others to be happy.  all misery
| comes from the desire for oneself to be happy.
| -- bodhicaryavatara
===============================================================================
Julian ''Julik'' Tarkhanov
2005-Dec-04  22:01 UTC
Re: restful interfaces and preserving PATH_INFO in custom dispatch/route
On 4-dec-2005, at 20:42, Ara.T.Howard wrote:> > i''m working on a restful interface to existing models in an app. > ideally i''d > like to preserve the existing dispatch mechanism and support a > parrallel one > that looks like > > http://0.0.0.0/rest/mime/model/id > > to do this i''d like to setup a rest controller which dispatches > based on the > http request method and path into. for example, a get sent to > > http://0.0.0.0/rest/xml/student/42 > > returns xml for student(s) with id 42. a post of xml to > > http://0.0.0.0/rest/xml/student/42 > > updates the record via a xml doc. of course i''ll never use these > and will > prefer > > http://0.0.0.0/rest/yaml/student/42 > > ;-) > > because i want to preserve the default rails dispatching mechanism > and isolate > all rest code into a single controller, thereby enabling the site > to be rest > enables for various formats with the addition of a single > controller and no > other code modification. the tricky bit is > > - how to configure rails such that the path_info (/student/42) is > preserved > - how to reuse as much of the existing route/dispaching code as > possible to > handle parsing this path_info > > any hints appreciated.map.connect ''rest/:format/:model/:action/:id on the controller side def index request.post? ? update_student : return_student end I think it should parse the params for you if they are YAML or XML but I''m not sure. Why would you want path-info here? -- Julian ''Julik'' Tarkhanov me at julik.nl
ara.t.howard-32lpuo7BZBA@public.gmane.org
2005-Dec-04  22:44 UTC
Re: restful interfaces and preserving PATH_INFO in custom dispatch/route
On Sun, 4 Dec 2005, Julian ''Julik'' Tarkhanov wrote:>> >> any hints appreciated. > > map.connect ''rest/:format/:model/:action/:id^ ^ ^ this is inferred from the REQUEST_METHOD. the idea is that a url like http://127.0.0.1/rest/student/42 is used for all of PUT (create), GET (read), POST (edit), and DELETE (delete).> on the controller side > > def index > request.post? ? update_student : return_student > endbut a post can be either an insert or an update...> I think it should parse the params for you if they are YAML or XML but I''m > not sure. Why would you want path-info here?http://127.0.0.1/rest/xml/student/42 ^ ^ ^^^^^^^ ^ ^ ^^^^^^^ ^ ^ ^^^^^^^ controller action path_info but now i think i understand what you are getting at... maybe a map.connect ''rest/:format/:model/:id'' for a specific record and map.connect ''rest/:format/:model/'' for all tuples. but i''m new to routes and don''t quite get the exact approach. thanks for the idea. -a -- ==============================================================================| ara [dot] t [dot] howard [at] noaa [dot] gov | all happiness comes from the desire for others to be happy. all misery | comes from the desire for oneself to be happy. | -- bodhicaryavatara ===============================================================================