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 完全不是为大型应用程序设计的;但是,对于在低流量环境中执行一两件事的小型工具来说,它可能是理想的选择。我还可以设想将其用于快速原型设计,如果您想为演示创建新应用程序的快速线框图。

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

您可以使用 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 {"

非常漂亮。谢谢!

不客气!请关注未来几个月内其他简洁实用的模块!

回复 作者 Robert X (未验证)

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.