Perl模块可用于不同的Web框架

时间:2013-11-24 14:45:53

标签: perl cgi plack

想要基本上创建一个perl-module:

  • 从网络请求中获取一些参数
  • 做一些内部逻辑
  • 并生成一个json字符串

我的问题是:这里有许多处理Web请求的不同方法(解码查询字符串),就像(两个值得注意的是:)

  • CGI $query->{‘somearg’}或类似
  • Plack(Plack :: Request)
  • 可能是另一个......(网页框架等......)

我应该如何编写模块,以便与不同的前端一起使用?

思考类似的事情:

pakage MyJSONProducer::Plack; # for Plack based apps
use MyJSONProducer;           # My module
my $prod = MyJSONProducer->new(); 
my $args = decode_plack_request_args($env); #make a hashref from args...
my $json = $prod->run($args); # call with args…


package MyJSONProducer::CGI;   # for CGI based ones
use MyJSONProducer;
my $prod = MyJSONProducer->new(); 
my $args = decode_cgi_args($query); #make a hashref from args...
my $json = $prod->run($args); # call with args...

依旧......

但有点我觉得这不是一个很好的解决方案......

这里有一些推荐的方法如何处理这种情况?任何CPAN模块我应该学习什么?

2 个答案:

答案 0 :(得分:2)

只需编写MyJSONProducer :: Plack。然后,如果要在CGI环境中部署应用程序,可以使用Plack::Handler::CGI之类的内容。

这是普拉克和PSGI的观点。如果您将代码编写到PSGI规范中,那么您可以将其部署到任何地方。

答案 1 :(得分:1)

你无能为力。不过,你可以使它更加用户友好。

假设您的模块名为Kobame。然后你将创建一个名为:

的其他几个模块
  • Kobame:CGI
  • Kobame:普拉克
  • ...

每个都将处理入门的细节,然后将调用您的核心Kobame模块。 Kobame模块必须采用通用的perl数据结构,不应引用Web模块的任何内容。