NAME

Dancer::Plugin::RPC - Placeholder for the Version-number

DESCRIPTION

This module contains two plugins for Dancer: Dancer::Plugin::RPC::XMLRPC and Dancer::Plugin::RPC::JSONRPC. They are plugins rather than Plack::Middleware.

Dancer::Plugin::RPC::XMLRPC

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.

Dancer::Plugin::RPC::JSONRPC

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.

General arguments to xmlrpc/jsonrpc

The dispatch table is build by endpoint.

publish => <pod|config|$coderef>

publish => pod

The dispatch table is build by parsing the POD for =for xmlrpc or =for jsonrpc.

=for xmlrpc <method_name> <sub_name>

The arguments argument must be an Arrayref with module names. The POD-directive must be in the same file as the code!

publish => config

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

The arguments argument should be empty for this publishing type.

publish => $coderef

With this publishing type, you will need to build your own dispatch table and return it.

return {
    method1 => \&Module::Name1::sub1,
    method2 => \&Module::Name1::sub2,
    method3 => \&Module::Name2::sub2,
};

arguments => $list

This argumument is needed for publishing type pod and must be a list of module names that contain the pod (and code).

callback => $coderef

The callback argument may contain a $coderef that does additional checks and should return a hashref with at least the success key.

$callback->($request, $method_name);

Returns for success: {success => 1}

Returns for failure: {success => 0, error_code => $code, error_message => $msg}

This is useful for ACL checking.

code_wrapper => $coderef

The code_wrapper argument can be used to wrap the code (from the dispatch table).

my $xmlrpc_handle = Some::Module->new(...);
my $wrapper = sub {
    my $code = shift;
    my $method = shift;
    $xmlrpc_handle->$code(@_);
};

COPYRIGHT

(c) MMXVI - Abe Timmerman <abeltje@cpan.org>