1

我读过Representational State Transfer (REST) 中的“state transfer”指的是什么?还有几篇关于 REST 的帖子或视频,我知道 REST 的约束之一是无状态的。

  1. 根据http://www.restapitutorial.com/lessons/whatisrest.html等许多帖子,为了使架构无状态,客户端必须持有足够的信息让服务器做正确的事情,这意味着服务器没有任何客户端状态。那么这是否意味着我们只是通过将一些用户状态(如 cookie)放在客户端中来构建一个 REST 应用程序?

  2. 但是根据许多帖子,例如Sticky Session / Session Affinity 负载平衡策略的优点和缺点?,我们可以通过将用户数据存储在数据库或内存缓存中来制作无状态应用程序,从而避免将会话存储在应用程序服务器中。如果我们尝试这种方法,我们可以制作一个 REST 架构吗?

4

2 回答 2

1

诚实 REST 服务的想法是允许与任何客户端轻松通信,甚至与不在 Web 浏览器中的客户端进行通信:它可以是移动或桌面应用程序或其他任何东西。因此,对服务的每个请求都必须提供处理该请求所需的所有信息。保持服务器上的状态会使任务复杂化,因为客户端不会控制它。

所以,是的,理想情况下,状态必须由客户持有。但是,我们需要清楚地理解“状态”是什么意思。因为那里有不同种类的状态:应用程序状态和资源状态。我喜欢下面关于区别的文章。

PS 顺便说一句,在 cookie 中保存状态也会使客户的生活变得复杂(如果他们不是网络浏览器)。

于 2014-11-20T13:55:34.830 回答
0

那么这是否意味着我们只是通过将一些用户状态(如 cookie)放在客户端中来构建一个 REST 应用程序?

您不必使用永久存储来执行此操作。如果我们谈论浏览器术语,您可以使用 javascript 程序作为客户端,并且可以将应用程序状态(客户端状态)存储在 javascript 变量中,而不是使用服务器端会话和会话 cookie。

如果您的系统支持身份验证,那么您必须在每个请求中发送用户标识符(例如用户名和密码),例如在 HTTP auth 标头中。请注意,REST 主要用于自动化客户端,而不是浏览器,而是 ofc。你也可以为浏览器编写一个自动化的 javascript 客户端。

我们可以通过将用户数据存储在数据库或内存缓存中来制作无状态应用程序,从而避免将会话存储在应用程序服务器中

这是错误的。

于 2014-11-20T17:51:10.837 回答