我需要一些澄清.我一直在阅读有关REST和构建RESTful应用程序的内容.根据维基百科,REST本身被定义为具象状态转移.因此,我不理解每个人都在喷涌的所有这种无国籍的gobbledeygook.
来自维基百科:
在任何特定时间,客户端可以在应用程序状态之间转换或"静止".处于休眠状态的客户端能够与其用户进行交互,但不会创建任何负载,并且不会在服务器集或网络上消耗每个客户端存储.
他们只是说不使用会话/应用程序级数据存储???
我知道REST的一个目标是使URI访问一致且可用,例如,而不是在帖子中隐藏分页请求,使请求的页码成为GET URI的一部分.我感觉合理.但似乎只是过分夸大说每个客户端数据(会话数据)都不应该存储在服务器端.
如果我有一个消息队列,并且我的用户想要阅读消息,但是当他阅读它们时,想要阻止某些发送者在其会话期间发出的消息,该怎么办?将它存储在服务器端的某个位置并让服务器只发送未被用户阻止的消息(或消息ID)是不是有意义的?
每次请求新邮件列表时,是否真的必须发送整个邮件发件人列表?与我相关的消息列表首先不会/不应该是公开可用的资源.
再次,只是想了解这一点.有人请澄清一下.
更新:
我发现了一个堆栈溢出问题,其答案并不能完全解决这个问题: 如何在REST 中管理状态,该状态表明重要的客户端状态应该在每次请求时都被转移.... Ugg ..似乎很多开销......这是对的吗?
我试图理解token-based authentication这些日子,它声称是一种stateless authentication方法.我遇到了这个概念stateless web application.
以下是我读过的一些主题:
起初,我对这个想法感到非常兴奋.但越来越多的我觉得stateless是pseudo-proposition.
例如,假设我们使用客户端存储的令牌进行身份验证,我们如何对在线用户进行统计(假设没有日志)?我们应该将令牌存储在DB中吗?这不是说我们在服务器上存储状态信息吗?更重要的是,DB中的名称,年龄等普通用户信息也是某种状态信息吗?
我认为这里真正的问题不是让网络应用程序无状态,而是让网络应用程序正确处理状态信息,这样它就不会危及可伸缩性.
这取决于如何解释这个词stateless:
我更喜欢2,因为总会有一些inevitable global state(引自@ deceze对他的答案的评论).无论我们将状态信息存储为HTML 5 Web存储,HTTP标头,隐藏表单字段还是Cookie,状态仍然存在.只是它存储在服务器以外的其他地方.
我错过了什么好事吗?任何人都可以对此有所了解,这样我可以从这种心理斗争中解脱出来吗?
添加1
刚刚看了一下这本书的RESTful Web服务通过Leonard Richardson.在第4章的本节末尾Statelessness,它将状态分为Application State和Resource State.因此,我之前提到的普通用户信息和数据,如图像等,可以归类为Resource State.什么stateless指的是Application State.因此它不会破坏无状态代码存储resource state在服务器上.
但该书还提到了这样一种情况:an application key is used to restrict …
无状态 Web 应用程序似乎很有前途。如何制作一个?尤其是 Spring WebMvc?有什么指导方针吗?
以下是我的一些想法:
添加 1
我认为这不是是否保留状态信息的问题。如果你想做一些有用的事情,状态信息总是必要的。这实际上是一个在哪里/如何保留状态信息的问题。这篇文章很有用。它提到了进程内/进程外会话、数据缓存以及为什么不使用会话。
有关的:
使用 Spring MVC 进行无状态 Web 应用程序开发 (尚未响应)
http://brockallen.com/2012/04/07/think-twice-about-using-session-state/