Category: Catalyst Keywords: XML RPC Catalyst
今天因为用到了这个模块,所以就在这里提一下。如果你有机会碰到同样的问题可以参考一下。因为 chunzi 有很多工作要做,而我又有点空加上想锻炼下自己。所以就配合他写 member.perlchina 的代码。代码块中有一功能是用户认证 API, 当然这个很复杂。首先需要一个详细的 SPEC 规格文档。
就目前处于没有文档的情况下,我就先试着用 XMLRPC 来写一个远程验证 API. 待文档确定后再修补。Catalyst 用于 RPC 有一 plugin 为 Catalyst::Plugin::XMLRPC , 它是以 RPC::XML 为基础的一个插件。
doc 很简单。唯一要注意的是要写在 use Catalyst qw/XMLRPC/; 同一文件里。以代码为例:
# 主程序模块文件(use Catalyst qw/XMLRPC)那文件,添加# 这与其他 Catalyst 的 Global 函数一样。定义了一个 rpc 方法。注意函数名不要为 xmlrpc, 这是插件的函数而验证代码我们可以简单写一下:
sub rpc : Global {
my ( $self, $c ) = @_;
$c->xmlrpc;
}# 所有方法后面带有 : Remote 的都是 XMLRPC 方法
sub auth : Remote {
my ( $self, $c, @args ) = @_;
return 'ERR_ARG_COUNT' if (scalar @args != 2);
my ($username, $password) = @args;
# 这里调用的是模块里自己定义的一个函数 auth, 你可以自己写 CDBI 代码
my $person = Person::M::CDBI::Person->auth( $username, $password );
return 'ERR_LOGIN_FAILED' unless ($person);
return 'ERR_UNACTIVED' unless ($person->has_actived);
return 'SUCCUSS';
}
#!/usr/bin/perl这是访问的一种方法,其他的可以参考 XML-PRC Client 客户端编写。Enjoy!
use strict;
use warnings;
use Data::Dumper;
use RPC::XML;
use RPC::XML::Client;my $cli = RPC::XML::Client->new('http://fayland:3000/rpc'); # XMLRPC 地址my $request = RPC::XML::request->new('auth', 'fayland', '123456'); # 方法名和两个参数my $response = $cli->simple_request($request);if (!$response) {
print "$RPC::XML::ERROR \n"; # No response
}
else {
print Dumper($response);
}