【发布时间】:2011-03-07 12:36:57
【问题描述】:
我需要澄清一下。我一直在阅读有关 REST 和构建 RESTful 应用程序的内容。根据维基百科,REST 本身被定义为Representational State Transfer。因此,我不明白每个人都在吐槽的所有这些无状态的 gobbledeygook。
来自维基百科:
在任何特定时间,客户端都可以在 应用程序状态或“静止”。处于休息状态的客户端能够 与其用户交互,但不产生负载并且不消耗每个客户端 存储在一组服务器或网络上。
他们只是说不要使用会话/应用程序级数据存储吗???
我知道 REST 的一个目标是使 URI 访问保持一致且可用,例如,不是将分页请求隐藏在帖子中,而是使请求的页码成为 GET URI 的一部分。我感觉合理。但似乎只是说每个客户端数据(会话数据)都不应该存储在服务器端。
如果我有一个消息队列,并且我的用户想要阅读这些消息,但是当他阅读它们时,想要在他的会话期间阻止某些发件人消息通过,该怎么办?将其存储在服务器端的某个位置,并让服务器仅发送未被用户阻止的消息(或消息 ID)是否有意义?
每次我请求新的邮件列表时,我真的必须发送整个邮件发件人列表来阻止吗?与我相关的消息列表首先不会/不应该是公开可用的资源..
再次,只是试图理解这一点。有人请澄清一下。
更新:
我发现了一个堆栈溢出问题,它的答案并没有完全让我明白: How to manage state in REST 这表示重要的客户端状态应该在每个请求上都被传输.... Ugg.. 似乎有很多开销...这是对的吗??
【问题讨论】:
-
@S.Lott:我不认为这是故意误导。我认为这是一种误解,因为术语混乱。
-
@只是我的正确意见:有趣的猜测。我自己都不敢相信这样的事情,因为“无状态”显然意味着 REST 协议本身是无状态的;它没有说明底层应用程序状态以及使用 PUT、POST 和 DELETE 请求对其进行更新。
-
@S.Lott :HTTP 协议本身是无状态的。从我们下面讨论的内容来看,REST 是关于如何在不让网络服务器处理会话状态的情况下构建应用程序的观点(与数据库等其他类型的状态相反)。我什至不认为 REST 是 协议,而是关于如何使用 HTTP 协议的观点。我以为你们澄清了,这是关于如何通过让客户端存储所有客户端特定的会话数据,并使 URI 访问尽可能幂等来构建应用程序以进行扩展,除非它们应该在哪里访问不是。也许不是... :(
-
“也许不是……”这是什么意思?你有新问题吗?随意搜索它。如果这里不存在,请询问。
-
有没有人读过 Webber、Parastatidis 和 Robinson 的 ReST in Practice(或者看过他们的 restbucks 例子)?下面的答案是有道理的,但是 restbucks 示例中的咖啡订单肯定是关于客户的状态吗?订单数量与客户数量成正比。客户端状态和资源之间的界限在哪里?
标签: rest session-state