[Catalyst] Tweaking REST

Adam Jacob adam at stalecoffee.org
Tue Jan 30 05:36:03 GMT 2007


On Jan 29, 2007, at 12:19 PM, Christopher H. Laco wrote:

> Christopher H. Laco wrote:
>> I'm needing to support RSS/Atom feeds of some of my cart/wishlist  
>> data.
>> The lazy guy in me says I can just make a view or two and be done  
>> with
>> it (Thanks for the code LTjake!). The anal retentive programmer in me
>> says I probably really want to use C::A::REST to get the benefit of
>> mime-type request mapping and de/serialization for other things that
>> might come along, like json/yaml.

Adding RSS/Atom is, as you say, just adding a proper serialization  
class for the data.

>> On top of that, I want things to also work by  
>> extension: .json, .atom,
>> .rss etc. That's where C::P::Flavour enters the picture.

I thought about that.  I have never seen Catalyst::Plugin::Flavour  
(it doesn't look like it has a CPAN release, nor is it in the  
Catalyst repo.)  Currently, C::A::REST supports using a content-type  
argument on GET requests to over-ride the serializer.  It would be  
pretty simple to just add the logic for the extension mapping to work  
as well

>> As it stands now, REST JustWorks with xml/json stuff. text/html is
>> mapped to YAML::HTML, but I want to map that to my standard TT  
>> view. As
>> for RSS/Atom, I'd need a Serializer for them, which in the end isn't
>> really different than writing a view.

I think you nail that problem lower down.  We should totally make a  
C::A::Serialize::View.

>> For the extension mapping, I was just going to do something like  
>> this in
>> my begin before deserialization happens:
>>
>>   $c->request->content_type(
>>     MIME::Types->new->mimeTypeOf($c->flavour)
>>   ) if $c->flavour;
>>
>> I'll have to add some missing mime-type, but that's no biggie.
>>
>> In the end, this seems to be a struggle between content-types, views,
>> and/or rest. They're all nice, just all unattached from each other.

Well, part of it is that I wrote C::A::REST with my own requirements  
in mind.  Which was primarily that it would be a "pure" REST service,  
without really having a useful TT style view.  I knew that this would  
be an issue, so I tried to write it in a way that extending it would  
be pretty easy.  I think adding a C::A::Serialize::View is the right  
idea.

>> Is there a better way?

I think we could probably put the functionality provided by Flavour  
directly into the loading of the Serializer in C::A::REST,  
essentially adding in the MIME::Type lookup based on the file extension.

I'm ridiculously busy until early in March.  I would love to put some  
feedback into what you are doing, and patches would be warmly  
welcomed.  :)

I'm on IRC most of the day; feel free to ping me in #catalyst or  
#catalyst-dev.

Adam (holoway)







More information about the Catalyst mailing list