Dancer-Plugin-RPC
view release on metacpan or search on metacpan
example/bin/do-rpc view on Meta::CPAN
use RPC::XML;
use RPC::XML::ParserFactory;
use Scalar::Util 'blessed';
use Data::Dumper;
has parser => (
is => 'lazy',
isa => sub { blessed($_[0]) eq 'RPC::XML::Parser::XMLParser' },
);
sub _build_parser {
my $self = shift;
return RPC::XML::ParserFactory->new();
}
sub call {
my $self = shift;
my ($method_name, $data) = @_;
my $request = RPC::XML::request->new($method_name => $data)->as_string();
$self->log_debug($request);
my $response = $self->client->request(
POST => $self->base_uri,
{
headers => {
'Content-Type' => 'text/xml',
'Content-Length' => length($request),
},
content => $request,
}
);
$self->log_trace(Dumper($response));
my $return;
if ( $response->{success} ) {
my $content = $response->{content};
$return = $self->parser->parse($response->{content})->value->value;
$self->log_debug(Dumper($data));
}
else {
$return = join(" ", @{$response}{qw/status reason/});
}
return $return;
}
1;
}
package RESTRPCClient {
use Moo;
with 'Client::HTTP';
use JSON;
use URI;
use Data::Dumper;
sub call {
my $self = shift;
my $call = shift;
my $http_method = shift || 'GET';
(my $endpoint = $self->base_uri->as_string) =~ s{/+$}{};
$endpoint .= "/$call" if $call;
my $request = @_ ? encode_json(shift) : '';
$self->log_debug("$http_method: $endpoint => $request");
my $response = $self->client->request(
$http_method => $endpoint,
{
headers => {
'Content-Type' => 'application/json',
'Content-Length' => length($request),
},
content => $request,
}
);
local $Data::Dumper::Indent = 1;
$self->log_trace(Dumper($response));
my $result;
if ($response->{success}) {
$result = decode_json($response->{content});
if (exists $result->{error}) {
return $result->{error};
}
else {
return $result;
}
}
else {
$result = join(" ", @{$response}{qw/status reason/});
}
return $result;
}
}
};
=head1 NAME
do-rpc - Doe een rpc-call.
=head1 SYNOPSIS
do-rpc -t xmlrpc -u <url> -c <methodName> arguments...
=head1 OPTIONS
--type|-t <jsonrpc|xmlrpc|restrpc> (verstek 'jsonrpc')
--url|-u <base_url> De base_url for
--call|-c <methodName>
--method|-m <GET|POST|PUT|DELETE> (verstek 'POST')
--json <jsonstring>
--debug
--help
do-xmlrpc => do-rpc -t xmlrpc "$@"
do-json => do-rpc -t restrpc "$@"
=head1 STUFF
(c) MMXV - Abe Timmerman <abeltje@cpan.org>
=cut
( run in 0.727 second using v1.01-cache-2.11-cpan-e93a5daba3e )