作为休息服务stateless
,它不会维护用户的任何互动,因此我想知道多个用户是否访问相同的休息服务,然后restful service
如何识别哪个用户与哪个用户进行互动方法 ?是否可以像stateful
那样提供宁静的服务?
答案 0 :(得分:1)
哪位用户:
使用在服务器上创建的共享密钥(一行字符),并在每次下一个请求时返回。
它被“保存”在cookie中并由客户端使用cookie或HTTP(S)标头返回。
哪种方法:
这取决于您使用的框架。但最终归结为将URI映射到您的方法。
是否有可能将有条不紊的服务作为有状态的?
你可以创建有状态的应用程序,然后他们就不会安静。一个宁静的应用程序是无国籍的。这就是定义,所以你可以创建有状态的应用程序,但你永远不能创建一个有状态的rest-app,因为rest是无状态的。
答案 1 :(得分:0)
根据我的观点,Restful web service作为一个无状态。具有一系列约束和属性的架构风格,因此它的属性是无状态的,我们不能改变它的属性,因此它并不意味着宁静的服务是有状态的。 / p>
我们可以将URI映射到您的方法,然后宁静地知道哪个用户正在调用哪个方法。
答案 2 :(得分:0)
客户端必须存储自己的会话状态,并在每个请求中将其传递给服务器。
REST架构风格的无状态约束定义如下:
[...]从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。因此,会话状态完全保留在客户端上。 [...]
如果客户端请求需要身份验证的受保护资源,则每个请求都必须包含要经过适当身份验证/授权的所有必需数据。请参阅RFC 7235:
中的这句话HTTP认证被认为是无状态的:认证请求所需的所有信息必须在请求中提供,而不是依赖于服务器记住先前的请求。
身份验证数据应属于标准HTTP授权标头。来自RFC 7235:
Authorization
标头字段允许用户代理使用原始服务器对自身进行身份验证 - 通常(但不一定)在收到401
(未授权)响应后。其值由包含所请求资源领域的用户代理的认证信息的凭证组成。 [...]
此HTTP标头的名称很不幸,因为它带有身份验证而不是授权数据。
对于身份验证,您可以使用Basic HTTP Authentication方案,该方案将凭据作为用户名和密码对进行传输,使用Base64进行编码:
Authorization: Basic <credentials>
如果您不想在每个请求中发送用户名和密码,则可以将用户名和密码交换为在每个请求中发送的令牌(例如JWT)。 JWT令牌可以包含用户名,到期日期以及可能与您的应用程序相关的任何其他元数据:
Authorization: Bearer <token>
有关详细信息,请参阅此answer。