Journal(2005) | Blog(2006) | RandomLink | WhoAmI | LiveBookmark | HomePage

<<Previous: Practice  >>Next: Hey, DONOT waste time anymore

Catalyst && XML-RPC

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
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!

<<Previous: Practice  >>Next: Hey, DONOT waste time anymore

Options: +Del.icio.us

Related items Created on 2005-10-11 21:50:30, Last modified on 2005-10-11 21:51:38
Copyright 2004-2005 All Rights Reserved. Powered by Eplanet && Catalyst 5.62.