基于web的实时通信与REST范式不兼容吗?

基于web的实时通信与REST范式不兼容吗?,rest,web-applications,websocket,real-time,meteor,Rest,Web Applications,Websocket,Real Time,Meteor,在过去几年中,Web应用程序经历了巨大的范式转变 十年前(甚至不幸的是现在),web应用程序只存在于重量级服务器中,处理从数据到表示格式的所有内容,并发送到只呈现服务器(浏览器)输出的哑客户端 然后AJAX加入了游戏,web应用程序开始转变为服务器和浏览器之间的东西 在AJAX的高潮期间,web应用程序逻辑开始完全依赖于浏览器。我认为这是HTTP RESTful API开始出现的时候。突然,每一项新服务都有了类似RESTful API的,JavaScript MV*框架突然像爆米花一样出现。移动

在过去几年中,Web应用程序经历了巨大的范式转变

十年前(甚至不幸的是现在),web应用程序只存在于重量级服务器中,处理从数据到表示格式的所有内容,并发送到只呈现服务器(浏览器)输出的哑客户端

然后AJAX加入了游戏,web应用程序开始转变为服务器和浏览器之间的东西

在AJAX的高潮期间,web应用程序逻辑开始完全依赖于浏览器。我认为这是HTTP RESTful API开始出现的时候。突然,每一项新服务都有了类似RESTful API的,JavaScript MV*框架突然像爆米花一样出现。移动设备的使用也大大增加,REST非常适合这种情况。我在这里说“有点RESTful”,因为几乎所有声称是REST的API都不是。但这是一个完全不同的故事

事实上,我成了一个“安息福音传道者”

当我认为web应用程序不会有更多的发展时,一个新的时代似乎正在到来:有状态的持久连接web应用程序。 是此类应用程序的优秀框架的一个示例。然后我看到了这个。在这段视频中,马特·德贝加利斯谈到了流星,两人都做得非常出色! 然而,出于这种目的,他在某种程度上降低了RESTAPI,以支持持久的实时连接

例如,我非常希望有实时的模型更新,但仍然拥有所有其他令人敬畏的功能。 流式REST API的似乎正是我所需要的(例如firehose.io和Twitter的API),但关于这种新型API的信息很少

所以我的问题是:

基于web的实时通信是否与REST范式不兼容?


(很抱歉有这么长的介绍性文字,但我认为这个问题只有在某些情况下才有意义)

web应用程序的有状态持久tcp/ip连接非常好,只要您不移动

我开发了一个基于web的实时框架,根据我的经验,我发现当使用基于移动设备的web浏览器时,IP地址会随着我从一座塔移动到另一座塔,或者从wi-fi移动到wi-fi而不断变化

当IP地址不断变化时,持久连接的概念很快就消失了

实时web应用程序框架的架构必须假设连接是暂时的,并且框架必须实现其自己的会话概念,同时与后端的底层IP连接不断变化

一旦在客户端和服务器之间的所有请求和响应中定义并使用了会话,就基本上有了“web连接”。现在,人们可以使用REST范式开发基于web的实时应用程序

框架的后端服务器必须是智能的,以便在IP地址进行转换时将更新排队,然后在重新建立tcp/IP连接时进行同步

简单的回答是,‘是的,你可以使用REST范式开发基于web的实时应用程序’


如果你想玩一个,请告诉我。

我对这个主题也很感兴趣。这篇文章有一些文章的链接,这些文章讨论了设计拙劣的RPC的一些问题:

我不是说流星的设计很差,因为我对流星了解不多

无论如何,我想我想要两个“世界”中最好的。我想从REST以及它提供的受约束的通用接口、可寻址性、无状态性等方面获益

而且,我也不想在这场“实时”网络革命中落后!这真是太棒了

我想知道是否有一种混合方法可以工作:

RESTful端点允许客户机进入空间,并按照HATEOAS的要求跟踪相关文档的链接。但是,对于资源的“更新流”,也许“子描述名称”本身可以是一个URI,当浏览到某个时间点的单个请求时,如通过web浏览器的地址栏或curl,将返回“当前状态”的表示形式,或者是资源先前状态的href链接列表和/或查询针对对象发生的离散“事件”的方法

通过这种方式,如果您使用实体的“版本1”声明,然后对其重播每个事件,您可以将其变为“当前状态”,并且这些事件可以流式传输到一个客户端,该客户端不希望仅仅因为实体的一小部分已更改而获得完整的表示。这基本上就是“事件存储”的概念,它包含在大量的CQRS信息中

就REST兼容而言,我相信这种方法已经实现了(尽管我不确定它的流媒体方面),我不记得它是在这本书中(REST在实践中),还是在Vaughn Vernon在QCon 2010录制的演讲中听到的演讲中:

他谈到了类似这样的URI设计(我记不清了)

主机/实体我是一个实时框架的作者,该框架基于流式RESTful API可以而且应该存在的前提。从项目网站:

Firehose是构建实时web应用程序的一种微创方法 无需复杂的协议或从头重写应用程序。它是一个 一个简单的发布/订阅服务器,用于保存客户端Javascript模型 通过WebSocket或HTTP长轮询与服务器代码同步它 完全接受RESTful设计模式,这意味着您最终将 一个很好的API后,你建立你的应用程序

我希望这个框架能阻止互联网回到RPC黑暗时代,但我们会看到会发生什么。我们确实使用消防水带。