通过 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 业务层的主要内容,如果未能解决你的问题,请参考以下文章

业务逻辑层应该访问数据库/数据访问层吗?

控制层接口规范

控制层接口规范

在单独的数据访问和业务逻辑层中,我可以在业务层中使用实体框架类吗?

ASP WebApi:服务层、业务层和数据访问层

java三层架构:数据访问层业务逻辑层表现层