非 RESTful 接口背后的 Restful API

Posted

技术标签:

【中文标题】非 RESTful 接口背后的 Restful API【英文标题】:Restful APIs behind non-restful interfaces 【发布时间】:2010-07-29 21:48:56 【问题描述】:

我正在尝试查找相关的最佳实践/规范/文献/等。解决在非 RESTful 外观(如 XMPP API 或 websockets 通道)后面使用 RESTful API(例如,标准 Rails 应用程序)的一般问题。

例如,我有一个安静的 Rails 应用程序,我想公开一个只读异步接口。这是非常简单的事情,Rails 应用程序推送到 Redis pubsub 通道,该通道又从 node.js 消耗,并发送到 websocket 通道 (1)。现在,我将如何最好地使这个异步 api 读/写?我正在考虑客户端通过 websockets 通道发送到服务器,基本上相当于序列化的 http 请求或轻量级 json 编码的有效负载,这些负载将依次进入 Resque 队列,然后从主应用程序中解析,但我想知道是否有我可以构建的以前的工作/规范/架构,或者我可能会忽略更优雅的方法。

(1) 显然,您可以将 'websockets' 替换为 'xmpp' 并且普遍关注的非 RESTful 接口背后的 RESTful 应用程序仍然适用。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我不确定除了调用/响应的方法是否真的有任何区别。

例如,在网络世界中,所有对 REST 接口的调用通常都是从浏览器进行的,其中任何状态跟踪都是在服务器端完成的,就像您与网络客户端打交道一样。因此客户端接口通常会发送大量数据(直接或间接通过 cookie)以允许服务器重构调用的上下文。

通过 XMPP(bosh 或直接)或 Websockets 进行调用时,您需要做同样的事情,因为客户端将与接收构成请求的节的中间体(XMPP 组件或机器人)交谈,收集任何存储的状态,然后将其传递给 REST。

在最基本的形式中,XMPP 机器人/组件只会接收传入的节,将其转换为 REST 调用,进行调用,然后打包结果。

【讨论】:

以上是关于非 RESTful 接口背后的 Restful API的主要内容,如果未能解决你的问题,请参考以下文章

restful接口风格

接口测试基础002----HTTP请求RESTful风格

非RESTful与RESTful

Restful接口规范

restful 接口 复杂对象入参

RESTful详解