REST 中的 ST(状态传输)是否意味着状态必须由客户端持有?



我读了 具象状态转移(REST)中的"状态转移"指的是什么?以及一些关于REST的帖子或视频,我知道REST的约束之一是无状态的。

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

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

诚实的

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

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

附言顺便说一句,在 cookie 中保持状态也会使客户端的生活复杂化(如果它们不是网络浏览器)。

那么这是否意味着我们只即将建立一个 REST 应用程序仅通过将某些用户状态放入客户端 喜欢饼干?

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

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

我们可以通过将用户数据存储在 数据库或 memcache,避免在应用程序中存储会话 服务器

这是错误的。

最新更新