我应该如何使用 Catalyst 在 Perl 中进行 RPC?

Posted

技术标签:

【中文标题】我应该如何使用 Catalyst 在 Perl 中进行 RPC?【英文标题】:How should I do RPC in Perl with Catalyst? 【发布时间】:2010-02-08 17:56:02 【问题描述】:

我一直在努力寻找一种好的 RPC 形式来标准化,但到目前为止,我遇到了很多麻烦,想知道 *** 社区的观点是什么。

我理想的 RPC 将提供以下内容:

对其他语言的支持比较广泛,因为人们不应该编写自定义堆栈来使用我们的服务器 输入验证 理想情况下,可以通过某种方式将上述输入验证转换为某种自动化文档以进行分发 干净且可维护的代码

我是 Catalyst 框架的粉丝,并且更愿意坚持使用它,但如果 R​​PC 服务器有明显更好的替代方案,我也会对此持开放态度。

到目前为止,我已经看过以下内容:

Catalyst::Controller::SOAP 似乎不支持返回复杂的数据结构,只支持 string('literals')。我可能可以在此之上序列化数据,但这似乎很hacky。它还允许您返回一个预先形成的 XML 对象,但我无法让它工作,而且看起来您需要重新创建大量 SOAP 数据结构才能使其工作。

我确实喜欢 WSDL 的想法,但整个规范的复杂性也让我想知道对与其他语言通信的支持会有多好。

基于自定义 POSTing XML 的控制器 我们尝试以与我们最近看到的其他两个项目类似的方式手动推出自己的项目,其中有一个您将 XML 发布到的调度 url。这使您可以拥有 XSD 验证/文档,但需要创建比我们现在想要维护的更多的代码。

Catalyst::Plugin::Server::XMLRPC 就使用将在未来版本的 Catalyst 中删除的已弃用方法发出警告。 没有输入验证或文档创建,但除此之外是我发现的最好的

JSONRPC 看起来与 XMLRPC 非常相似,只是模块实际上是更新的。除非有人提出更好的建议,否则我可能会继续这样做 似乎还有两个不同的催化剂模块可以执行 JSONRPC

【问题讨论】:

【参考方案1】:

我意识到 REST 不是纯 RPC(只是一个子集),但是...

我会推荐Catalyst::Controller::REST 和Catalyst::Action::REST 模块。它们经常更新,文档相当不错。在标题为Day 9 - Web Services with Catalyst::Action::REST 的 2006 Catalyst Advent 日历中,还有一个很好的(但相当过时的)示例使用 Catalyst::Controller::Rest。

【讨论】:

【参考方案2】:

FWIW,Catalyst::Controller::SOAP 确实支持返回复杂数据。查看文档http://search.cpan.org/~druoso/Catalyst-Controller-SOAP-1.23/lib/Catalyst/Controller/SOAP.pm,它将告诉您可以使用 WSDL 来描述您的服务。另外,请参阅http://daniel.ruoso.com/categoria/perl/soap-today.html.en 了解更详细的分步过程。

【讨论】:

soap-today.html.en 似乎已经变成 404。你有机会让它再次可用吗?

以上是关于我应该如何使用 Catalyst 在 Perl 中进行 RPC?的主要内容,如果未能解决你的问题,请参考以下文章

在 perl 中分析 IIS 网站

我应该如何在 Perl 中使用“my”关键字?

模板工具包和复杂变量

Mac Catalyst - 保存文件的标准对话框

如何在 Mac 上的 Mac Catalyst 应用程序中使用钥匙串?

Perl / DBIx :: Class :: Schema :: Loader后缀_2以复制关系名称