我正在尝试在Perl中实现一个RESTful API。我的当前想法是通过正则表达式解析path_info,然后将请求分派到适当的子例程,该子例程将输出所请求资源的JSON、XML甚至XHTML。
例如,要检索有关用户1234的信息,RESTful客户端应在以下位置找到它:
http://example.com/model.pl/users/1234
以下是我第一次尝试实现RESTful API的框架代码:
model.pl:
#!/usr/bin/perl -w
use strict;
use CGI;
my $q = CGI->new();
print $q->header('text/html');
my $restfuluri = $q->path_info;
if ($restfuluri =~ /^\/(questions)\/([1-9]+$)/) { questions($1, $2); }
elsif ($restfuluri =~ /^\/(users)\/([1-9]+$)/) { users($1, $2); }
sub questions
{
my $object = shift;
my $value = shift;
#This is a stub, spits out JSON or XML when implemented.
print $q->p("GET question : $object -> $value");
}
sub users
{
my $object = shift;
my $value = shift;
#This is a stub, spits out JSON or XML when implemented.
print $q->p("GET user: $object -> $value");
}
在我继续之前,我想听听有经验的Perl黑客们的意见,看看我是否理解了基本思路,并且是否存在性能方面的严重缺陷。
我可以想象,过一段时间后,if/else代码块会变得非常庞大。
期待听取您的意见,让这段代码更加优秀。