ReST over websockets可能吗?

Kri*_*a P 58 rest xmpp websocket

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

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

此外,ReSTful架构声明服务器上不会存储任何会话状态.但是在这种情况下,当创建XMPP客户端会话时,此会话的状态将存储在服务器上(违反无状态约束)

Dan*_*edo 60

REST是一种不强加协议的架构风格.所以,是的,如果你愿意,可以使用Web套接字,使用HTTP的REST和使用FTP的REST进行REST.

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

我的咆哮: 如果你是一个RESTliban并且Roy Fielding的论文是真理的来源,那么动词永远不会被认为是语义的一部分.URI是语义.对不同动作使用不同的动词是REST over HTTP的优雅演变,但不是"真相"的一部分.您可以他的论文的第六章中查看Roy评估剩余HTTP方案.没有提到动词.请注意,这是一个评估方案,而不是规范.

TLDR;

如果您需要通过互联网进行实时双向通信,而客户端是Web浏览器,则最佳选择是Web套接字.然后,您可以在Web套接字上实现应用程序级协议,以实现RESTful Web服务.


jde*_*bel 16

是.您可以将REST over WebSocket与 SwaggerSocket等一起使用.

  • @gentimouton他说的只是你可以使用Swagger与REST服务进行交互.他从来没有说过swagger是REST ......你使用HTTP来与REST接口,这就是重点. (5认同)

sai*_*ama 10

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

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

  • 那么,如何实现与REST的实时通信?在WebSockets上使用REST的想法或多或少是合法的.我想通过实时通信获得REST语义.但是,我开始认为这两件事情是完全不相容的. (9认同)
  • @miguelcobain我知道这已经很晚了,但REST的整个概念都是基于无状态请求.REST中没有实时通信. (5认同)
  • @saintedlama这个答案是错误的,正如另一个答案所说,它的架构风格不应该依赖于协议 (5认同)
  • @ Davy8所以,你的意思是当有人选择使用REST时,他永远无法实现实时更新?我们是否坚持使用旧的基于时间间隔的服务器轮询技术? (4认同)
  • 想象一下,客户端可以自己公开端点.假设,当服务器上有新的"水果对象"时,服务器可以"POST"到新更新的客户端.其他客户端可以像往常一样通过HTTP GET检索它.我认为这两个端点可能是实现REST实时性的关键. (4认同)
  • 实际上,REST over websockets非常有意义.您可以实现REST层以保持标准API的所有好处,同时还可以获得websockets的优势(减少数据开销和数据推送).我很惊讶你得到了和你一样多的赞成. (3认同)