[Catalyst] Mapping parameters for web services
Bill Moseley
moseley at hank.org
Mon Oct 22 23:20:09 GMT 2007
I'm looking for suggestions how to best map XMLRPC request parameters into
the params and arguments that my existing (web) controllers are
expecting.
I have a number of controllers that I'd like to expose for web
services. The C::P::Server::XMLRPC plugin makes this easy since one
can add :XMLRPC to any existing controller to expose it.
My controllers tend to be thin -- that is they don't fetch every bit
of data that the View might display. Some of that work is left to the
templates. So, for XMLRPC I also have a separate View that prepares
any data needed for the response. This view is called instead for
XMLRPC requests.
Frankly, feels a bit dirty but I'm doing basically:
sub process {
my ( $self, $c ) = @_;
my $method = $c->action->reverse;
$method =~ s[/][_]g;
$self->$method( $c ) if $self->can( $method );
}
So, I can add a method to this view for any controller that needs
extra help preparing the XMLRPC response.
So, on to my question:
The parameters and arguments that come in on web requests are
different than they come in for XMLRPC requests -- so I need to "map"
the arguments from the XMLRPC request into the arguments and
parameters as the existing controllers expect.
So, my question is *where* to do that? It's application-specific
so seems like something that should happen in auto().
As above, there's the View system to prepare the response. Should I just
cheat and abuse it on requests as well? That is:
sub auto : Private {
my ( $self, $c ) = @_;
$c->forward( $c->view( 'XMLRPC::Input' ) ) if $c->is_xmlrcp;
return 1;
}
And then that "view" would adjust the request arguments and parameters
as needed.
What approach is recommended to map (filter?) the request based on the
action?
--
Bill Moseley
moseley at hank.org
More information about the Catalyst
mailing list