[Catalyst] RESTy Chained actions

Stephen Howard stephen at enterity.com
Fri Jun 25 16:08:04 GMT 2010


I'm wrapping up a project where I do this.  Here's my method  
signatures.  The url structure is:

/tutorials
/tutorials/*
/tutorials/*/comments
/tutorials/*/comments/*
/tutorials/*/comments/*/replies
/tutorials/*/comments/*/replies/*

#  
------------------------------------------------------------------------------
sub list :Chained('/') PathPart('tutorials') Args(0) :  
ActionClass('REST') {}

sub list_GET { ... }
sub list_POST { ... }
sub list_HEAD { ... }

#  
------------------------------------------------------------------------------
sub find_tutorial :Chained('/') PathPart('tutorials') CaptureArgs(1)  
{ ... }

#  
------------------------------------------------------------------------------
sub single :Chained('find_tutorial') PathPart('') Args(0)  
ActionClass('REST') { ... }
sub single_GET { ... }
sub single_POST { ... }

#  
------------------------------------------------------------------------------
sub comments :Chained('find_tutorial') PathPart('comments')  
Args(0) :ActionClass('REST') {}

sub comments_GET  { ... }
sub comments_POST { ... }

#  
------------------------------------------------------------------------------
sub find_comment :Chained('find_tutorial') PathPart('comments')  
CaptureArgs(1) { ... }

#  
------------------------------------------------------------------------------
sub comment :Chained('find_comment') PathPart('')  
Args(0) :ActionClass('REST') {}
sub comment_GET { ...  }
sub comment_POST { ... }
sub comment_DELETE {...}

#  
------------------------------------------------------------------------------
sub replies :Chained('find_comment') PathPart('replies')  
Args(0) :ActionClass('REST') {}

sub replies_GET {  ... }
sub replies_POST { ... }

#  
------------------------------------------------------------------------------
sub reply :Chained('find_comment') PathPart('replies')  
Args(1) :ActionClass('REST') { ... }

sub reply_POST  { ... }
sub reply_DELETE  { ... }

On Jun 25, 2010, at 8:02 AM, John Lifsey - Contractor - 5595 wrote:

> Is there any way to chain actions such that they can be endpoints or  
> intermediate steps?
>
> For example:
>
> I want to have a REST controller that allows these URLs to work  
> using ActionClass REST and Chained
>
> http://myapp.com/car - dispatch to sub car_GET for list of cars
>
> http://myapp.com/car/corvette - dispatch to car_GET for a single  
> record
>
> http://myapp.com/car/corvette/model - dispatch to sub model_GET  
> chained to sub car{} for a list of corvette types
>
> http://myapp.com/car/corvette/model/Z06 - dispatch to sub model_GET  
> chained to sub car{} for a single corvette type record
>
> something like this doesn't quite work:
>
> sub car :ActionClass('REST') Chained CaptureArgs(1) {}
> sub model :ActionClass('REST') Chained('car') Args(1) {}
>
> So my question: Is there a Chained incantation to allow all of the  
> following to be endpoints?
>
> /car
> /car/aCarID
> /car/aCarID/model
> /car/aCarID/model/aModelID
>
> Or am I just DoingItWrong all together?
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/




More information about the Catalyst mailing list