| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
via DBIC. I have noticed that a number of other people have been working on or are thinking about working on something similar, most notabley J. Shirley who seems to be creating Catalyst::Controller::REST::DBIC::Item (http://dev.catalystframework.org/svnweb/Catalyst/browse/Catalyst-Controller-RES T-DBIC-Item/) and some chaps from a recent thread on this list (entitled "Dispatching with Chained vs HTTP method"). Ideally I would like to merge J. Shirley's effort into mine (or visa versa) along with anything that anyone else has. Basically I want to avoid ending up with a load of modules that all do the same thing. My effort is heavily based on something mst wrote a while ago, and since then I've ended up writing something very similar for every project I've worked on which indicates it's worth OSing. Essentially it is used like so: package MyApp::Controller::API::REST::CD; use base qw/Catalyst::Controller::REST::DBIC/; ... __PACKAGE__->config ( action => { setup => { PathPart => 'cd', Chained => '/api/rest/rest_base' } }, class => 'RestTestDB::CD', create_requires => ['artist', 'title', 'year' ], update_allows => ['title', 'year'] ); 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] The full source is here: http://lukesaunders.me.uk/dists/Catalyst-Controller-REST-DBIC-1.000000.tar.gz If you have a few moments please have a look, especially if you are working on something similar. Today I even wrote a test suite which has a test app and is probably the best place to look to see what it does. Note that it lacks: - list and view type methods which dump objects to JSON (or whatever) - clever validation - it should validate based on the DBIC column definitions but it doesn't - any auth - not sure if it should or not, but it's possible Also it doesn't distinguish between POST, PUT, DELETE and GET HTTP requests favouring instead entirely separate endpoints, but that's up for discussion. So, J. Shirley, do you have any interest in a merge? And others, do you have ideas and would you like to contribute? Thanks, Luke. _______________________________________________ List: Catalyst Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst/ Dev site: http://dev.catalyst.perl.org/
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© 2004-2008 readlist.com