Dancer::Plugin::RPC - Configure endpoints for XMLRPC, JSONRPC and RESTRPC procedures
This module contains plugins for Dancer: Dancer::Plugin::RPC::XMLRPC, Dancer::Plugin::RPC::JSONRPC and Dancer::Plugin::RPC::RESTRPC.
This plugin exposes the new keyword xmlrpc
that is followed by 2 arguments:
the endpoint and the arguments to configure the xmlrpc-calls at this endpoint.
This plugin exposes the new keyword jsonrpc
that is followed by 2 arguments:
the endpoint and the arguments to configure the jsonrpc-calls at this endpoint.
This plugin exposes the new keyword restrpc
that is followed by 2 arguments:
the endpoint and the arguments to configure the restrpc-calls at this endpoint.
The dispatch table is build by endpoint.
-
publish => config
The arguments argument should be empty for this publishing type.
The dispatch table is build from the YAML-config:
plugins:
'RPC::XMLRPC':
'/endpoint1':
'Module::Name1':
method1: sub1
method2: sub2
'Module::Name2':
method3: sub3
'/endpoint2':
'Module::Name3':
method4: sub4
-
publish => pod
The arguments argument must be an Arrayref with module names. The POD-directive must be in the same file as the code!
The dispatch table is build by parsing the POD for=for xmlrpc
,=for jsonrpc
or=for restrpc
.
=for xmlrpc <method_name> <sub_name>
-
publish => $coderef
The arguments argument should be empty for this publishing type.
With this publishing type, you will need to build your own dispatch table and return it.
use Dancer::RPCPlugin::DispatchItem;
return {
method1 => dispatch_item(
package => 'Module::Name1',
code => Module::Name1->can('sub1'),
),
method2 => dispatch_item(
package => 'Module::Name1',
code => Module::Name1->can('sub2'),
),
method3 => dispatch_item(
pacakage => 'Module::Name2',
code => Module::Name2->can('sub3'),
),
};
This argumument is needed for publishing type pod and must be a list of module names that contain the pod (and code).
The callback argument may contain a $coderef
that does additional checks
and should return a Dancer::RPCPlugin::CallbackResult object.
$callback->($request, $method_name, @method_args);
Returns for success: callback_success()
Returns for failure: callback_fail(error_code => $code, error_message => $msg)
This is useful for eg ACL checking.
In the scope of the callback-function you will have the variable
$Dancer::RPCPlugin::ROUTE_INFO
, a hashref:
local $Dancer::RPCPlugin::ROUTE_INFO = {
plugin => PLUGIN_NAME,
endpoint => $endpoint,
rpc_method => $method_name,
full_path => request->path,
http_method => $http_method,
};
Other plugins may want to put extra information in there to help you decide if this request should even be honoured.
The code_wrapper argument can be used to wrap the code (from the dispatch table).
my $wrapper = sub {
my $code = shift;
my $pkg = shift;
my $method = shift;
my $instance = $pkg->new();
$instance->$code(@_);
};
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See:
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
© MMXVI - Abe Timmerman abeltje@cpan.org