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

时间:2014-11-19 12:00:49

标签: rest web architecture stateless web-architecture

我阅读了What does “state transfer” in Representational State Transfer (REST) refer to?以及有关REST的几个帖子或视频,我知道REST的一个约束是无状态的。

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

  2. 但是根据像Pros and Cons of Sticky Session / Session Affinity load blancing strategy?这样的帖子,我们可以通过将用户数据存储在数据库或内存缓存中来创建无状态应用程序,从而避免在应用程序服务器中存储会话。如果我们尝试这种方法,我们可以制作REST架构吗?

2 个答案:

答案 0 :(得分:1)

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

所以,是的,理想情况下,国家必须由客户持有。 ,我们需要清楚地了解我们所说的" state"。因为有不同类型的状态:应用程序状态和资源状态。关于区别,我喜欢以下article

P.S。 而且,在cookie中保持状态会使客户的生活变得复杂(如果它们不是网络浏览器)。

答案 1 :(得分:0)

  

这是否意味着我们只是要建立一个   REST应用程序只能通过在客户端中放置一些用户状态   像饼干一样?

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

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

  

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

这是假的。