Web::Simple Perl 模块简介:极简主义 Web 框架

Perl 模块 Web::Simple 易于学习,并且功能强大,足以应对各种一次性的小型服务。
384 位读者喜欢这篇文章。
Image of spider web

You as a Machine。由 Rikki Endsley 修改。CC BY-SA 2.0。

Perl 社区中较为杰出的成员之一是 Matt Trout,他是 Shadowcat Systems 的技术总监。多年来,他一直在为 Perl 应用程序构建核心工具,包括担任 Catalyst MVC(模型、视图、控制器)Web 框架的联合维护者,DBIx::Class 对象管理系统的创建者,以及更多。他本人精力充沛、有趣、才华横溢,有时让人难以跟上他的节奏。当 Matt 编写代码时……可以想象一下失控的电锯,扳机被胶带粘住,安全功能被禁用。他已经开始行动,你永远无法确切知道会发生什么。几乎可以肯定两件事:该模块将精确地满足 Matt 的预期目的,并且它将出现在 CPAN 上供其他人使用。

Matt 的特殊用途模块之一是 Web::Simple。它被誉为“构建简单 Web 应用程序的快速简便方法”,它是一个精简的、极简主义的 Web 框架,具有易于学习的界面。Web::Simple 根本不是为大型应用程序设计的;但是,它可能非常适合在低流量环境中执行一两件事的小工具。我还可以想象将其用于快速原型设计,如果您想为演示创建新应用程序的快速线框图。

安装,以及快速的“Howdy!”

您可以使用 cpancpanm 安装该模块。一旦您安装了它,您就可以编写简单的 Web 应用程序,而无需费心管理连接或任何其他内容——只需关注您的功能即可。这是一个快速示例

#!/usr/bin/perl
package HelloReader;
use Web::Simple;

sub dispatch_request {
  GET => sub {
    [ 200, [ 'Content-type', 'text/plain' ], [ 'Howdy, Opensource.com reader!' ] ]
  },
  '' => sub {
    [ 405, [ 'Content-type', 'text/plain' ], [ 'You cannot do that, friend. Sorry.' ] ]
  }
}

HelloReader->run_if_script;

有几件事需要立即注意。首先,我没有像通常那样 use strictuse warnings。Web::Simple 为您导入了这些,因此您不必这样做。它还导入了 Moo,一个极简主义的 OO 框架,所以如果您了解 Moo 并想在这里使用它,您可以!系统的核心在于 dispatch_request 方法,您必须在应用程序中定义该方法。方法中的每个条目都是一个匹配字符串,后跟一个子例程,用于在字符串匹配时响应。子例程必须返回一个数组引用,其中包含对请求的回复的状态、标头和内容。

匹配

Web::Simple 中的匹配系统非常强大,允许进行复杂的匹配、在 URL 中传递参数、查询参数和扩展匹配,几乎可以以您想要的任何组合方式进行。正如您在上面的示例中看到的,以大写字母开头将匹配请求方法,您可以轻松地将其与路径匹配结合使用

'GET + /person/*' => sub {
  my ($self, $person) = @_;
  # write some code to retrieve and display a person
  },
'POST + /person/* + %*' => sub {
  my ($self, $person, $params) = @_;
  # write some code to modify a person, perhaps
  }

在后一种情况下,匹配的第三部分表明我们应该拾取所有 POST 参数,并将它们放在一个名为 $params 的哈希引用中,供子例程使用。在该部分匹配中使用 ? 而不是 % 将拾取查询参数,就像通常在 GET 请求中使用的那样。还有一个有用的导出子例程,称为 redispatch_to。此工具允许您重定向,而无需使用 3xx 重定向;它在内部处理,用户不可见。所以

'GET + /some/url' => sub {
  redispatch_to '/some/other/url';
}

/some/url 的 GET 请求将被视为已发送到 /some/other/url,而无需重定向,并且用户不会在其浏览器中看到重定向。

我只是浅尝辄止地介绍了这个模块。如果您正在为更大的项目寻找生产就绪的模块,那么最好使用 DancerCatalyst。但是凭借其轻量级和内置的 Moo 集成,Web::Simple 的功能足以应对各种一次性的小型服务。

User profile image.
Ruth Holloway 长期以来一直担任系统管理员和软件开发人员,她的职业生涯始于很久以前的 VAX 11/780。她职业生涯的大部分时间(到目前为止)都在为图书馆提供技术需求服务,并且自 2008 年以来一直是 Koha 开源图书馆自动化套件的贡献者。Ruth 目前是 Clearbuilt 的 Perl 开发人员和项目负责人。

6 条评论

这对初学者来说很棒。非常感谢!

不客气!请期待即将发表的更多类似文章;我已经安排了其他很棒的 Perl 初学者文章和 Perl 模块文章!

回复 作者:Chrissy McLennon

在一些代码示例中有一个错字,应该是“=> sub {”,而不是“= sub {”

您说得太对了,我已经进行了更正——谢谢!

回复 作者:x (未验证)

非常漂亮。谢谢!

不客气!请关注未来几个月推出的其他实用模块!

回复 作者:Robert X (未验证)

Creative Commons 许可协议本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.