【问题标题】:Is an API RESTful if it allows permanent requests (server push)如果允许永久请求(服务器推送),则为 API RESTful
【发布时间】:2012-04-22 20:44:17
【问题描述】:

我正在编写一个 REST API,提供对资源的 CRUD 操作。

我希望用户能够注册某些资源更改并通过服务器推送获取更新。对于服务器推送,我将提供对反向 ajax、隐藏 iframe 和 websockets 的支持。为了尽可能保持 REST,我创建了一个 Streaming 资源来处理注册和与客户端的连接:

流媒体资源:

URI uri : A GET against this URI refreshes the client representation of the resources accessible to this user.
bool WebSocket : Indicate if websocket is available on this server
bool ReverseXHR : Indicate if ReverseXHR is available on this server
bool HiddenIframe : Indicate if HiddenIframe is available on this server
Registration[] Registrations :  The set of registration tasks.

OpenChannel : 打开从网络服务器到客户端的流媒体通道。 GET参数类型=(websocket|xhr|hiddeniframe)

CloseChannel : 关闭从网络服务器到客户端的流媒体通道。 GET参数类型=(websocket|xhr|hiddeniframe)

openchannel?type=websocket 的调用将打开 websocket 并开始传输注册值的数据。

我已经阅读了很多文章,但我仍然有点困惑。这样做后我还能调用我的 API REST 吗?如果不是(或是),为什么?

感谢您的帮助!

【问题讨论】:

  • 你是怎么做到的?我不会担心模式的纯度——服务器推送越来越重要。我想知道你是如何实现这个的..

标签: rest websocket comet reverse-ajax


【解决方案1】:

首先,始终实施有意义的方法来解决您面临的问题。遵循给定的架构风格会带来特定的好处,但这不应排除针对给定问题的实用解决方案。

但话虽如此,您似乎正在使用资源数据流作为在客户端和服务器之间来回“传输”信息的一种方式。我对此很陌生,但在我看来,隧道数据违反了REST architectural style. 中的uniform interface 约束,HTTP 隧道是对基于肥皂的服务的批评之一。

【讨论】:

  • 目前我只使用流式传输将数据从服务器发送到客户端。使用 COMET 反向 ajax 或隐藏 iframe 技术时,不涉及 HTTP 以外的其他协议。它可以被视为一个永久请求,在这种情况下,我不知道它是否与 REST 兼容。当使用 WebSockets 时,它确实是隧道,所以你是对的,这必须打破统一接口约束。虽然我会让这个问题打开,因为我对反向 ajax 和隐藏 iframe 的答案很感兴趣。谢谢 Sixto
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多