Я пытаюсь реализовать RESTful API в Perl. Моя текущая идея - просто проанализировать 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 станет очень большим.
Будем рады услышать ваше мнение, чтобы сделать этот код лучше.