当前位置: 首页 > 知识库问答 >
问题:

是否可以通过websockets实现ReST?

皇甫琛
2023-03-14

我计划开发一个基于web的聊天应用程序,它接收ReSTful请求,将它们转换为XMPP,并将它们发送到XMPP服务器。

在这种基于聊天的应用程序中使用WebSocket看起来很有希望,因为事件(或响应)可以异步传递。但是,如果我使用WebSocket作为从浏览器传输请求的底层协议,这仍然可以被视为ReSTful设计吗?如果是的话,URI、动词(GET、POST…)是怎样的,websocket消息中表示的参数?将它们封装在xml/json中并发送?

此外,ReSTful体系结构声明不会在服务器上存储任何会话状态。但在本例中,当创建XMPP客户端会话时,该会话的状态将存储在服务器上(违反无状态约束)

共有3个答案

李安歌
2023-03-14

为什么要在socket之上构建REST API?REST API的好处是利用标准HTTP协议的可能性,如无状态请求、语义动词(如GET、DELETE)来构建一个(客户端)开发人员易于理解的API。由于套接字不提供HTTP谓词等,因此您需要为套接字构建某种HTTP层,这是不合理的。

如果您真的要构建这样的东西,我建议使用HTTP协议作为蓝图并实现类似HTTP的套接字协议。

印高阳
2023-03-14

对您可以将REST over WebSocket与类似于SwiggerSocket的库一起使用。

乐正育
2023-03-14

REST是一种不强加协议的体系结构样式。是的,如果你愿意,你可以用Web套接字、HTTP和FTP来做REST。

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

我的咆哮:如果你是RESTliban,罗伊·菲尔丁的论文是真理的源泉,那么动词永远不会被认为是语义的一部分。URI是语义。在不同的动作中使用不同的动词是REST在HTTP上的优雅演变,但不是“真理”的一部分。您可以查看Roy在其论文第六章中评估的rest over HTTP场景。不提动词。请注意,这是一个评估场景,而不是规范。

太长,读不下去了

如果您需要通过internet进行实时双向通信,并且客户端是web浏览器,那么最好的选择是web套接字。然后,您可以在web套接字之上实现应用程序级协议,以实现RESTful web服务。

 类似资料:
  • 我正在构建一个复杂的聊天应用程序,使用WebSockets。我使用Node.js的socket.io库来实现协议。我应该为每个聊天创建单独的命名空间,还是为每个聊天创建单独的房间? socket.io中名称空间和房间的主要区别是什么?

  • 问题内容: 我正在学习ReactJs,真的很喜欢。我想问一下我们是否可以按类名呈现虚拟DOM以进行文档记录。 我试图通过 getElementByClassName(’class’) 作为react的render方法的第二个参数,它不起作用。React是否仅将DOM呈现给ID唯一的节点,还是有一种使用类的节点的解决方法? 问题答案: 看来您使用了错误的方法。 可能您应该使用而不是。并且不要忘记返回

  • 我有以下代码: 可以用代码设置吗?如果是,怎么做? 我想按代码设置,因为我想解决另一个问题,请单击此处 一个人告诉我使用lookup get selector,但它返回null。 下面的代码就是我所做的?你能告诉我怎么了吗? 任何帮助都将不胜感激。

  • null 如果我们等待的时间足够长,就会出现超时,导致客户端上出现以下消息。 这就是我在使用长轮询时所面临的问题。它停止进程以防止服务器过载,不是吗?

  • 我正在开发一个应用程序,用户必须从列表中选择任意数量的国家,我必须通过多部分发送所选的名称。 但是,在所有的尝试中,我都得到了错误retrofit.retrofiterror:Part body不能为null。 我还提到,ChangeLog for refitfit提到“new:Support iterable and array参数使用OKHTTP的”,但是经过深入研究,我发现给定的示例相当混乱

  • 访问 xxx_m.jpg 或 xxx_m.jpeg ,如果返回 404 或 403 ,则重定向到 xxx.jpg 或 xxx.jpeg 可以理解为实现“访问压缩图 url ,如果 访问不到,则重定向原图 url” 问了 AI ,回答我是可以实现的,但是运维同学说实现不了,不确定 AI 是不是瞎扯的,有没有大佬解答下。 下面贴下 AI 给的配置: