通过 REST 访问 Erlang 业务层
Posted
技术标签:
【中文标题】通过 REST 访问 Erlang 业务层【英文标题】:Accessing Erlang business layer via REST 【发布时间】:2010-09-30 06:36:12 【问题描述】:对于一个大学项目,我正在考虑在 Erlang 中实现业务层,然后使用 REST 通过多个前端访问它。我想利用分布式应用程序等 OTP 功能。
我的问题是如何将 gen_server 调用/强制转换暴露给其他应用程序?显然,我可以通过特定于语言的“桥”(如 OTP.net 或 JInterface)进行 RPC 调用,但我想要一种一致的方式来访问它,如 REST。
【问题讨论】:
【参考方案1】:正如已经提到的,Yaws 或 Mochiweb 是一个很好的方法,但是如果您想要一个简单的方法来快速正确地完成您的 RESTful API,那么请使用Webmachine。它是 Mochiweb 之上的一个层,它基于 Alan Dean 惊人的 HTTP flow diagram 实现正确的 HTTP 行为,并且可以轻松地正确完成 REST。
我现在使用它来公开一个 REST API 以及处理一个 COMET 应用程序,这很容易做到,即使对于像我这样的 Erlang 新手也是如此。
【讨论】:
【参考方案2】:我为我的工作做了类似的事情,发现最好使用 REST 来公开业务层,因为即使是 SoftwareAG 的 Natural 等传统语言也能够访问它。我在 Erlang 中找到的最佳机制是使用 Mochiweb。
您可以从位于以下位置的截屏视频中找到有关使用它的更多信息 Erlang In Practice Screencast。第 6 集特别有用,但都非常出色。
指导您完成安装的资源是 How To Quickly Set Up Ubuntu 8.04 loaded with Erlang, Mochiweb and nginx,如果您没有找到自己喜欢的截屏视频,Migrating a native Erlang interface to RESTful Mochiweb (with a bit of TDD) 提供了一个良好的开端。
【讨论】:
【参考方案3】:HTTP 流程图链接已失效。 Alan Dean 和 Justin Sheehy 合作创建的原始版本和更新版本也托管在 Webmachine 项目中:link to latest version of the HTTP Diagramm。
【讨论】:
【参考方案4】:如果可能的话,有一种有价值的方法来设计 gen_server 调用/转换以 REST 风格。您可以将消息用作
get, Resource
set, Resource, Value % aka PUT
delete, Resource
add, Resource, Value % aka POST (possible another names are append, modify or similar)
那么它的映射很容易。您可以进行一些转换 URI->RESOURCE 或使用身份。对于您的大多数应用程序,这应该是麦芽汁方法,特殊情况您应该特别处理。您可以认为会有很大的余量,您不能使用这种方法,但这应该是过早的优化。
【讨论】:
【参考方案5】:您真的是指 RESTful 接口或 RPC over HTTP 吗?在现有层之上构建 RESTful 接口不仅仅是通过 HTTP 公开现有方法。
我建议使用 mochiweb 或 yaws 来实现(通用)rpc 层。
【讨论】:
【参考方案6】:只是一个更新,Webmachine 已移至 bitbucket:new link to Webmachine
【讨论】:
来自 Justin Sheehy “我要补充一点,我们已经弃用了 webmachine 的旧位置,如果你总是想查看最新版本,你想在“basho”用户下查找副本,而不是我的名字。” bitbucket.org/basho/webmachine 或 github.com/basho/webmachine以上是关于通过 REST 访问 Erlang 业务层的主要内容,如果未能解决你的问题,请参考以下文章