[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