Adam, thanks for the feedback and suggestions! See below for more comments:

On Dec 7, 2006, at 12:28 PM, Adam Jacob wrote:

On Wed, Dec 06, 2006 at 10:08:08AM -0500, Christopher Heschong wrote:
Hi, I've created a simple library to make calls to REST services, along with an associated Catalyst model, and wanted to get some feedback. The class itself is called CRUST and basically it's just some very simple glue for URI, LWP, XML::Simple (although any other serialization formatters are
supported). GET and POST are supported of course.

My first thought is that you are going to need to support the full range
of HTTP Methods.  At the very least, you will need: GET, POST, PUT and
DELETE.  You probably want to support OPTIONS and HEAD as well.


Thanks. There are ->get and ->post methods already, plus ->request ($method, ...) for any other method LWP supports if you need those. But it's probably a good idea to add them as methods by default. Although what would you really expect to get back from OPTIONS? I'm sort of expecting some XML or something back now.


Here's an example of how I might use it to talk to Yahoo! Answers:

  # Create a CRUST model
  package MyApp::Model::Amazon;
  use base 'Catalyst::Model::CRUST';

  __PACKAGE__->config(
    base => 'http://answers.yahooapis.com/AnswersService/V1/',
    query => { appid => 'YahooDemo' }
  );

The query part might be better named "params", since that's what
Catalyst uses.

Another good point, will fix.


  # Meanwhile in a controller nearby
$c->stash->{answers} = $c->model('YahooAnswers')->get ( 'questionSearch',
      query => $c->req->param('query')
  );

Ew!  Do they really have URLs like questionSearch and getByCategory?
Very un-RESTful.

(No comment... it's better than Amazon IMHO)

Does anyone find this useful?  SVN snapshot is available:
  http://svn.screwdriver.net/repos/code/CRUST

Should this sort of thing being uploaded to CPAN? Anyone want to review
the code beforehand?

Something like this is both useful and good.  I'm not certain what the
best way to implement it is.  I'll try and find some time to look at
your code soon.

Adam


One thought that crossed my mind was to make methods like:

$c->model('whatever')->get_questionSearch( [params] )
$c->model('whatever')->post_questionSearch( [params] )

or just

$c->model('whatever')->questionSearch( [params] ) #default to GET


instead of what I have now:

$c->model('whatever')->get('questionSearch(params => ...);
$c->model('whatever')->post('questionSearch(params => ...);

A bit of AUTOLOAD should do the trick, but would the above syntax be better or worse?

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/

Reply via email to