11 October 2005
This post may be outdated due to it was written on 2005. The links may be broken. The code may be not working anymore. Leave comments if needed.
今天因为用到了这个模块,所以就在这里提一下。如果你有机会碰到同样的问题可以参考一下。

因为 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
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);
}

这是访问的一种方法,其他的可以参考 XML-PRC Client 客户端编写

Enjoy!



blog comments powered by Disqus