rest和Http中“无状态”的含义

时间:2019-01-03 05:18:30

标签: rest http stateless

当我阅读有关REST是什么的文档时,他们经常说的一句话是REST api应该是无状态的。在这里,我感到有些尴尬,因为普通的HTTP也是无状态的。

由于可以说REST是使用HTTP协议的特殊体系结构,因此说REST应该是无状态的似乎很多余。

“无状态”一词在REST和HTTP中是否含义相同? 如果没有,请告诉我区别


我不是在问http中无状态的含义,而是在休息和http上无状态的区别

3 个答案:

答案 0 :(得分:1)

HTTP中的无状态意味着每个请求都不知道任何先前的请求,即HTTP中没有内置机制来跟踪谁在发出请求以及这些请求的效果。

就RESTful服务而言,这意味着每个请求都不依赖状态(例如,保存的客户端信息)来满足请求-满足请求所需的所有信息都包含在请求消息中(CRUD操作) ,相关资源,身份验证令牌,应用平台标识等)。

这意味着您的RESTful API应该由管理身份验证,会话管理和其他非RESTful操作的分层体系结构保护。

在这种情况下,RESTful服务和HTTP应该在相同的约束下运行:无状态(如上定义)。


设计这样的REST API似乎很直观,但是您会惊讶于许多REST服务的核心之间的紧密耦合:

GET /users/:id

if authenticated and authorized //not stateless
    send User resource

为解决这个问题,大多数HTTP框架都提供了中间件层。


有用的REST设计问题:

答案 1 :(得分:1)

  

“无状态”一词在REST和HTTP中是否含义相同?

是的

它们相同的原因是HTTP是REST的结果。

  

自1994年以来,REST体系结构风格一直被用来指导现代Web体系结构Fielding, 2000的设计和开发。

在他的论文之前,菲尔丁是RFC 2068RFC 2616的作者。

  

为澄清起见,您能告诉我“”现在称为REST的原理是通过Fielding在HTTP上的工作得到完善的。”是什么意思?

Reflections on the REST Architectural Style的第1部分包括一个时间表:HTTP的第一个实现是在1990-91年,Fielding在1993年开始参与。在规范过程中(RFC 1945RFC 2068,{ {3}})Fielding开发了一个“ HTTP对象模型”,后来被理解为“ REST建筑风格”。

  

REST的第一版在1994年10月至1995年8月之间开发,主要是在我们编写HTTP / 1.0规范和最初的HTTP / 1.1提议时,用于传达Web概念的一种方式。 -RFC 2616

这就是说,REST的思想与HTTP的标准化并行发展而成为一个先知:我们如何评估提案是否会破坏或破坏Web的重要属性?

Fielding描述了一些标准不匹配的后果。

答案 2 :(得分:0)

REST代表代表性状态转移,这意味着状态是代表性的。请求跟踪机制或会话未保留在api服务器上。请求的状态可以转移到其他api服务器。

此外,像GET / users /:id之类的约定指出,每个资源都在url中内置了一种识别机制,因此,由于URL本身包含客户端资源请求信息,因此无需跟踪请求中的资源,例如: GET / users / 1,PUT / users / 1。