NAME
CatalystX::SimpleAPI - Simple API support for Catalyst apps
SYNOPSIS
package ServiceApp::Controller::API;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller' }
with 'CatalystX::Controller::SimpleAPI';
__PACKAGE__->config(
authkeys => {
'AE281S228D4' => {
ip_check => '^10\.0\.0\.[0-9]+$',
valid_applications => 'myapp',
},
},
);
sub auto : Private {
my ( $self, $c ) = @_;
# will return false if the api did not pass authorization.
return $self->prepare_api_request($c);
}
sub foo : Local {
my ( $self, $c ) = @_;
$c->stash(
api_response => {
processed => 1,
status => 'success',
data => {
results => $c->req->params,
}
},
);
}
1;
...
package MyApp::Model::ServiceApp;
use Moose;
use namespace::autoclean;
extends 'Catalyst::Model';
with 'SimpleAPI::Agent';
__PACKAGE__->config(
api_key => 'AE281S228D4',
application_id => 'myapp',
api_base_url => 'http://localhost:5000/'
);
1;
...
$c->model('ServiceApp')->request('/api/foo', { value => 10 });
DESCRIPTION
It provides a simple API support - currently only JSON based - for Catalyst applications.
USAGE
In your actions, all your API arguments will have already been placed in $c->stash->{'api_params'}
. Your API response will be placed in $c->stash->{'api_response'}
. The api_response
hash should have the following structure.
$c->stash->{'api_response'} = {
# true / false value indicating the request was processed.
processed => 0,
# 'success' or 'failed' indicating whether the request was processed
# successfully.
status => 'failed',
# hashref containing the results of the api action
data => {},
# error messages in the form of field => 'message' in the case of an error
errors => {
# 'general' should always be present to describe the overall error
general => 'failed validation',
# per-parameter error messaging if appropriate.
ingredient => 'Ingredient is invalid.',
},
};
If you process your request, you should set processed
to 1 even if the request was did not have a successful result. The processed
value is used to indicate that the parameters were accepted and the action requested was attempted. The status
value is used to indicate whether the requested action accomplished what was requested. The basic rule of thumb here is that processed
should only be set to 0 if the action could not be started for some reason (such as auth failure or other exceptional condition.) Note that if processed
is 0, status
will ALWAYS be failed.
In your subclass, you will need to call the $self->prepare_api_request($c)
method to initialize the API request. This is usually done in the auto
action or the root of the action chain.
SEE ALSO
AUTHOR
Jay Kuri (jayk) <jayk@cpan.org>
.
CONTRIBUTORS
Wallace Reis (wreis) <wreis@cpan.org>
.
SPONSORSHIP
Development sponsored by Ionzero LLC http://www.ionzero.com/.
COPYRIGHT & LICENSE
Copyright (C) 2010 Jay Kuri and the above contributors.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.