重新审查websockets可能吗?

我打算开发一个基于Web的聊天应用程序,它接收ReSTful请求,将它们转换成XMPP并将它们传送到XMPP服务器。

这种基于聊天的应用程序使用websockets看起来很有希望,因为事件(或响应)可以asynchronous传递。 但是如果我使用websocket作为从浏览器传输请求的底层协议,那么这仍然可以被认为是一个ReSTfuldevise吗? 如果是,URIs,动词(GET,POST …),websocket消息中表示的参数如何? 用xml / json包装它们并发送它?

另外,ReSTful体系结构指出没有会话状态将被存储在服务器上。 但是在这种情况下,当创build一个XMPP客户端会话时,这个会话的状态将被存储在服务器上(违反无状态约束)

你为什么要在套接字之上构build一个REST API? 恕我直言,REST API的好处是利用标准HTTP协议的可能性,如无状态请求,语义动词(如GET,DELETE)来构build一个可以被(客户)开发人员轻松理解的API。 由于套接字不提供HTTP动词等等,你会build立一些HTTP层,恕我直言,这是不合理的套接字。

如果你真的build立这样的事情,我build议使用HTTP协议作为蓝图,并实施HTTP协议的套接字协议。

REST是一种不强加协议的架构风格。 所以是的,你可以做REST的Web套接字,REST的HTTP和REST的FTP如果你喜欢。

使用HTTP的主要原因是,通过HTTP与任何组件或编程语言进行通信非常容易且相当简单,而且HTTP支持具有多个中介的分布式环境:代理,防火墙…; 所以你可以在任何拓扑上部署你的服务,任何人都可以访问它。

我的咆哮:如果你是一个RESTliban和罗伊·菲尔丁gradle论文是真理的来源,动词是从来没有承认作为语义的一部分。 URI是语义的。 对于不同的动作使用不同的动词是REST over HTTP的一个优雅的演变,但不是“真相”的一部分。 你可以检查他的博士论文Roy Roy评估的静态HTTPscheme。 没有提到动词。 并注意这是一个评估scheme,而不是规范。

TLDR;

如果您需要通过互联网进行实时双向通信,并且客户端是networking浏览器,那么最好的select是Web套接字。 然后,您可以在Web套接字之上实现一个应用程序级别的协议来实现一个RESTful Web服务。

是。 您可以使用REST over WebSocket与SwaggerSocket之类的库。

我不明白为什么要将XMPP转换为REST,然后通过WS运行REST。 WebSocket的意义在于直接将XMPP协议带入浏览器,从而避免了所有的翻译问题。

有一些JavaScript库可以将XMPP从浏览器与服务器交谈。 您所需要的只是将来自WS的XMPPstream量代理到TCP,然后直接进入您的XMPP服务器。 Kaazing有一个网关 ,可以让你做到这一点。

如果你想使用开源,你需要编写一个JavaScript XMPP库。 有些例子展示了如何为简单的协议编写一个JS库。 你只需要find一个概念并将其扩展到XMPP协议。

所以回顾一下,这里是架构的外观:

您的XMPP客户端代码< – > XMPP JavaScript库< – >通过http的WebSocket < – > WebSocket到TCP代理< – > XMPP服务器

其中XMPP客户端代码和XMPP JavaScript库在浏览器中运行,并且WS到TCP代理以及XMPP服务器都是服务器端。

REST架构风格主要假设一个2个实体即。 客户端和服务器。

随着我们更多地面向实时Web和开发反应式系统,WebSocket将突出开始取代REST API的使用。

WS允许数据推拉,这就消除了服务器和客户端的概念。

STOMP,AMQP,XMPP可以用作消息传递协议。

数据本身可能是JSON或Google协议缓冲区,也可能是Apache Avro。

WebSockets并不与Web服务器绑定,但可以在独立的应用程序(如移动应用程序或桌面应用程序)中进行开发。

我刚刚在一家提供云解决scheme的公司的博客上发现了新的话题,并在游戏的“服务器端/服务作为平台”(SaaS)提供了一个新的话题。

我没有给这家公司做广告,也没有用过,所以我甚至不知道它们有多好或坏。

但是,他们非常清楚地解释了原因,以及在REST中使用WebSockets有什么好处。阅读他们的博客