[Catalyst] RFC: Catalyst::Controller::REST::DBIC

luke saunders luke.saunders at gmail.com
Sun May 4 11:09:10 BST 2008


On Sun, May 4, 2008 at 6:05 AM, J. Shirley <jshirley at gmail.com> wrote:
>
> On Sat, May 3, 2008 at 9:29 PM, Patrick Donelan <pat at patspam.com> wrote:
>  >
>  > > And this gets you the following endpoints to fire requests at:
>  > >    /api/rest/cd/create
>  > >    /api/rest/cd/id/[cdid]/update
>  > >    /api/rest/cd/id/[cdid]/delete
>  > >    /api/rest/cd/id/[cdid]/add_to_rel/[relation]
>  > >    /api/rest/cd/id/[cdid]/remove_from_rel/[relation]
>  >
>  > Those URLs don't strike me as very RESTful.
>  >
>  > Patrick
>  >
>
>  That is my first impression.  My work is an enhancement from
>  Catalyst::Action::REST, which is a great module already out on CPAN
>  and used by other people (holoway++).
>
>  I'm all for collaboration, but my work is mostly tied to have exposed
>  webservices (in addition to a web-browser compatibility layer) via
>  REST.  By that I mean that I expect, and require, that I can do a PUT
>  /api/rest/cd/[cdid], DELETE /api/rest/cd/[CDID]
>

Sure, but I have previously had problems getting a browser to send PUT
requests from JS so separate endpoints were required. In fact the Dojo
author even said that PUT was a nightmare, use POST (possibly fixed in
recent Dojo version / browsers). i see no reason why you can't have
one base action which forwards to the others based on request type so
that both URL types are exposed.

>  On a side note about REST - REST doesn't mean human readable URLs.  It
>  means representative URLs.  The bit about cd/id/{CDID}/ smells like
>  named parameters going into positional parameters.  What is the real
>  difference between cd?id={CDID}&action=delete, aside from different
>  characters?  Where as with REST, /cd/{id} is a unique identifier for
>  that object and hence a full representation.
>

I find having the id in the path to be a clearer distinction between
object level operations and class level operations. It's the
difference between object and all objects.

>  You can catch me on IRC next week, as I'm actively working on this for
>  $work and it's getting real dev time (finally).  My work is
>  functionally complete, but lacking test cases; it is just a refactor
>  of existing code in production.
>

So you don't want to automate any actual operations? In which case if
anything my module could subclass yours.



More information about the Catalyst mailing list