2010年にXMLRPCをPerl5でつかう方法について考えた(XMLRPC on Plack)
以下のように RPC::XML をつかうとよい。
Following code is XMLRPC server snippet on Plack. This code uses RPC::XML.
use strict; use warnings; use Plack::Request; use Plack::Builder; use RPC::XML; use RPC::XML::ParserFactory 'XML::LibXML'; sub res { RPC::XML::response->new(@_) } my %dispatch_table = ( 'sum' => sub { my $args = shift->value; return res(0 + $args->{a} + $args->{b}); }, 'echo' => sub { my $args = shift->value; return res($args); }, ); my $app = sub { my $req = Plack::Request->new(@_); my $q = RPC::XML::ParserFactory->new()->parse($req->content); my $method_name = $q->name; my $code = $dispatch_table{$method_name} or return [404, [], ["not found: $method_name"]]; my $rpc_res = $code->(@{$q->args}); return [ 200, [ 'Content-Type', 'text/xml' ], [ $rpc_res->as_string ] ]; }; builder { enable 'ContentLength'; $app; };
クライアントは XMLRPC::Lite をつかってもよいのだが、こちらも同様に RPC::XML を利用して
my $cli = RPC::XML::Client->new('http://localhost:9096/'); my $resp = $cli->send_request('echo', "hello"); say $resp->value;
などとするのがよいのではないか。
XMLRPC::Lite にくらべると RPC::XML の方がインストール時の癖もすくないし、SOAP を前提にしていない分コードもよみやすいように感じる。速度面についても、RPC::XML の方が 7x Faster である。
ref.http://d.hatena.ne.jp/tokuhirom/20100928/1285630821