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

时间:2010-02-08 17:56:02

标签: perl rpc catalyst

我一直在努力寻找一种优秀的RPC来进行标准化,但到目前为止,我遇到了大量的墙壁,并且想知道stackoverflow社区的观点是什么。

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

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

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

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

催化剂::控制器:: SOAP 似乎不支持返回复杂的数据结构,只支持字符串('literals')。我可能会在此基础上序列化数据,但这似乎非常hacky。它还允许您返回一个预先形成的XML对象,但我无法使其工作,看起来您需要重新创建大量的SOAP数据结构才能工作。

我确实喜欢WSDL的想法,但整体规范的复杂性也让我想知道与其他语言通信的支持程度如何。

自定义POSTing基于XML的控制器 我们尝试以类似于我们最近看到的两个其他项目的方式来推广自己,其中有一个你发布XML的调度URL。这使您可以获得XSD验证/文档,但是需要创建比我们此时想要维护的代码更多的代码。

催化剂::插件::服务器:: XMLRPC 发出有关使用将在未来版本的Catalyst中删除的已弃用方法的警告。 没有输入验证或文档创建,但除此之外我发现的最好

JSONRPC 看起来非常类似于XMLRPC,只是模块实际更新了。除非有人提出更好的建议,否则我可能会继续下一步 似乎还有两个不同的催化剂模块用于JSONRPC

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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以获取更详细的分步过程。