你推荐啥 Perl RESTful 框架? [关闭]

Posted

技术标签:

【中文标题】你推荐啥 Perl RESTful 框架? [关闭]【英文标题】:What Perl RESTful framework do you recommend? [closed]你推荐什么 Perl RESTful 框架? [关闭] 【发布时间】:2010-12-13 02:56:34 【问题描述】:

您好,我正在寻找一个 Perl RESTful 框架,它必须:

在 apache2/mod_perl2 下工作 简单一点 优雅 轻一点 要灵活

我只是在做梦还是可以避免“自己动手”的方法?

你会推荐什么框架?

【问题讨论】:

【参考方案1】:

我在一些较小的项目中使用过Dancer (github)。它非常优雅并且很容易快速完成任务。它的灵感来自 Ruby 框架 Sinatra。

很简单:

#!/usr/bin/env perl
use Dancer;

get '/' => sub 
    'Hello world!'
;

dance;

【讨论】:

【参考方案2】:

如果您查看测试套件,Dancer 的文档记录良好且值得信赖:大约 500 个测试覆盖了超过 80% 的源代码树。

它符合 PSGI/Plack 标准并且几乎没有依赖项。 1.0 版应该很快就会发布(也许这个周末)。

请参阅the dancer website 继续关注。

【讨论】:

【参考方案3】:

另一个需要考虑的是Mojolicious,它允许以非常直接的方式编写和测试 RESTful API。

【讨论】:

【参考方案4】:

我想你会发现Squatting 勾选了所有这些框!

我已经用它编写了很多小型 RESTful 应用程序。它非常适合这一点,并且很高兴与之合作。

这里有更多链接:

GitHub repo Discussion group / mailing list Some blog posts Squatting on mod_perl2

这是一个简单的“你好世界!”示例:

use strict;
use warnings;


  package Simple;
  use base 'Squatting';


 
  package Simple::Controllers;
  use Squatting ':controllers';

  our @C = (
    C(
      Index => [ '/' ],
      get   => sub  
        my ($self) = @_;
        my $v = $self->v;
        $v->hello = 'Hello World!';
        $self->render( 'hello' );
      ,
    ),
  );



  package Simple::Views;
  use Squatting ':views';
  use html::AsSubs;

  our @V = (
    V(  'html',

      layout => sub  
        my ($self, $v, @yield) = @_;
        html(
          head( title('Simple web app') ),
          body( @yield ),
        )->as_HTML;
      ,
  
      hello => sub 
        my ($self, $v) = @_;
        p( $v->hello );
      ,
    ),
  );

将以上内容保存为 Simple.pm 在相关位置,并确保以下内容在您的 Apache 配置中:

<Perl>
  use Simple 'On::MP20';
  Simple->init
</Perl>

<Location />
  SetHandler perl-script
  PerlHandler Simple->mp20
</Location>

你走吧!

在这里,我还要顺便提一下其他几个应该符合要求的框架:

Mojolicious::Lite Dancer

我说“顺便提一下”是因为我没有使用过其中任何一个,而且我不确定其中任何一个是否适用于 mod_perl2(开箱即用)。仍然有PSGI / Plack 指日可待,这不会是太久的问题;-)

/I3az/

【讨论】:

【参考方案5】:

我最喜欢的 Perl Web 应用程序框架是CGI::Application。它非常轻量级(您可以从其继承的单个基类),并且只完成了处理 Web 应用程序编程的重复性任务所必需的最低限度,否则就不会妨碍您。您可以在正式的 MVC 设计中使用它,或者根据您的需要做更多的事情ad hoc

它有一个简单的plugin 架构,允许您轻松添加对 Template Toolkit (开箱即支持HTML::Template)sessions, authentication, JSON, streaming, 等等。

最后,对于创建类似 REST 的友好 URL,有出色的 CGI::Application::Dispatch,它为您提供了一个强大的基于规则的引擎,用于基于 URL 的调度。

此外,尽管它的名字,它在 mod_perl 1 和 2 下无缝运行。

【讨论】:

【参考方案6】:

Catalyst 是一个 MVC 框架,您可以使用它来制作 Restfull 服务

它在 apache2/mod_perl2 下运行 它简单而优雅,但恕我直言,它不如大多数“新”MVC 框架 是的 .. 很轻。 不要以为它真的很灵活.. :( ..

编辑: - 我说的“新”框架是那些有很好的测试框架可供使用的框架(比如 rails/spring/Seam,除了正常的单元测试之外,使用催化剂进行测试并不容易),还有很多开发人员正在努力构建应用程序(围绕这些框架的社区更加活跃)。这就是为什么我不认为 Catalyst 也很灵活。

【讨论】:

那么您对 ​​Catalyst 的看法有问题。它可能是所有各种 Web 框架中最灵活的。而且我不确定你为什么认为它很难测试。 催化剂,事实上,大多数 perl 社区都依赖于来自 Test::Builder、Test::Harness 和 Test::More 沿袭的大量测试框架。对于网站的功能测试,我们中间的 Selenium 用户有 Test::WWW::Selenium,或者对于更简单的非 ajaxy 网站,Test::WWW::Mechaninze。然后,所有这些接口都可以在面向对象的测试框架中分层,其中包含诸如 Test::Class 之类的类,这是一个出色的 xunit 样式测试框架。我不确定您正在寻找什么测试框架,或者您是否只是不熟悉那里的内容。 我不确定你为什么不推荐 Catalyst,它非常灵活,而且随着迁移到 Moose,变得更加灵活。使用 Catalyst,您还可以非常轻松地构建 REST 服务。请参阅:search.cpan.org/~bobtfish/Catalyst-Action-REST-0.78/lib/…。至于测试,与 Perl 的其余部分一样,Catalyst 中内置了很多测试功能。看看search.cpan.org/~flora/Catalyst-Runtime-5.80013/lib/Catalyst/… 和相关模块。总而言之,我会说催化剂是一个不错的选择。 +1 表示 Catalyst,但 -1 表示关于灵活性/可测试性的错误评论。 我想我以前从未听说过有人称 Catalyst 为“轻量级”——即使没有添加 Moose,它也长期以来一直是 CPAN 大规模依赖链恐怖故事的典型代表。 (而且,如果有人抱怨 Catalyst 以外的依赖链,他们抱怨的可能是 Moose,所以 Moosifying Catalyst 无济于事。)【参考方案7】:

我终于推出了自己的纯 mod_perl2 RESTful API 专用框架: http://code.google.com/p/apache2rest/

没有什么是内置的,除了基本的。其余的都是可扩展的(或将是)。我看了你所有的建议,它们似乎都解决了太多的问题(DBI 管理、ORM、模板引擎、嵌入式服务器......)。

这就是我写这篇文章的原因。我希望你会发现它有用。

【讨论】:

【参考方案8】:

很抱歉回答有点晚,但我在link text 中描述了一个 REST 框架,它对我来说效果很好。它使添加新资源变得非常简单;除了特定于资源的业务逻辑之外,我几乎不需要写更多的东西;框架负责其余的工作。

【讨论】:

以上是关于你推荐啥 Perl RESTful 框架? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

不明白php的restful,有啥实际用处吗

你啥时候需要在 Perl 中 `END close STDOUT`?

你会推荐啥ORM? [关闭]

这个 CGI/HTML/Perl 程序有啥问题? [关闭]

你会推荐啥与 Sinatra 等效的 python? [关闭]

有没有啥地方可以找到关于 Perl 模块相对流行度的信息? [关闭]