NAME

Dancer2::Plugin::RPC - Namespace for XMLRPC, JSONRPC2 and RESTRPC plugins

DESCRIPTION

This module contains plugins for Dancer2: Dancer2::Plugin::RPC::XMLRPC, Dancer2::Plugin::RPC::JSONRPC and Dancer2::Plugin::RPC::RESTRPC.

Dancer2::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.

Dancer2::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.

Dancer2::Plugin::RPC::RESTRPC

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.

General arguments to xmlrpc/jsonrpc/restrpc

The dispatch table is build by endpoint.

publish => <config|pod|$coderef>

        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.
        =for xmlrpc <method_name> <sub_name> [<endpoint>]
The **arguments** argument must be an Arrayref with module names. The
POD-directive must be in the same file as the code!
        use Dancer2::RPCPlugin::DispatchItem;
        return {
            method1 => Dancer2::RPCPlugin::DispatchItem->new(
                package => 'Module::Name1',
                code => Module::Name1->can('sub1'),
            ),
            method2 => Dancer2::RPCPlugin::DispatchItem->new(
                package => 'Module::Name1',
                code    => Module::Name1->can('sub2'),
            ),
            method3 => Dancer2::RPCPlugin::DispatchItem->new(
                pacakage => 'Module::Name2',
                code     => Module::Name2->can('sub3'),
            ),
        };

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 Dancer2::RPCPlugin::CallbackResult object (with the use of Dancer2::RPCPlugin::CallbackResultFactory).

$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 ACL checking.

code_wrapper => $coderef

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(@_);
    };

LICENSE

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.

AUTHOR

© MMXVII - Abe Timmerman abeltje@cpan.org