当前位置: 首页 > 知识库问答 >
问题:

restful服务如何识别哪个用户调用哪个方法以及如何使restful服务成为有状态的?

万承志
2023-03-14

由于restful服务是无状态的,它不维护用户之间的任何交互,所以我想知道如果多个用户访问同一个restful服务,那么如何识别哪个用户与哪个方法交互?有没有可能使restful服务成为有状态的?

共有3个答案

常海
2023-03-14

根据我的观点,Restful web服务是无状态的。它的架构风格有一组约束和属性,所以它的属性是无状态的,我们不能更改它的属性,所以它并不意味着restful服务是有状态的。

我们可以将URI映射到您的方法,然后restful知道哪个用户正在调用哪个方法。

施海
2023-03-14

客户端必须存储自己的会话状态,并在每个请求中将其传递给服务器。

REST体系结构样式的无状态约束定义如下:

5.1.3无国籍

[...] 从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文。因此,会话状态完全保留在客户机上。[...]

如果客户端请求需要身份验证的受保护资源,则每个请求都必须包含所有需要正确身份验证/授权的数据。请参阅RFC 7235中的以下引用:

HTTP身份验证被认为是无状态的:必须在请求中提供验证请求所需的所有信息,而不是依赖于服务器记住先前的请求。

鉴别数据应该属于标准的HTTP授权头。

4.2.授权

Authorization头字段允许用户代理在收到401(未经授权)响应后,向源服务器进行身份验证。它的值由包含所请求资源领域的用户代理的身份验证信息的凭据组成。[...]

这个HTTP头的名称很不幸,因为它携带的是身份验证而不是授权数据。

对于身份验证,可以使用基本HTTP身份验证方案,该方案以用户名和密码对的形式传输凭据,使用Base64编码:

Authorization: Basic <credentials>

如果不想在每个请求中发送用户名和密码,可以将用户名和密码交换为在每个请求中发送的令牌(如JWT)。JWT令牌可以包含用户名、过期日期和与应用程序相关的任何其他元数据:

Authorization: Bearer <token>

有关更多详细信息,请参阅此答案。

易炳
2023-03-14

哪个用户

通过使用共享密钥(一行字符),在服务器上创建,并随下一个请求返回。

它被“保存”在cookie中,并由客户端使用cookie或HTTP(s)头返回。

哪种方法:

这取决于您使用的框架。但最终它归结为将URI映射到您的方法。

有可能使restful服务成为有状态的吗?

你可以创建有状态的应用程序,但它们不是rest。rest应用程序是无状态的。这就是定义,所以你可以创建有状态的应用程序,但你永远不能创建有状态的rest应用程序,因为rest是无状态的。

 类似资料:
  • 问题内容: 我正在使用GWT作为Web开发框架。我需要从我的GWT客户端代码访问一些REST服务。我还需要解析JSON(或XML),这是这些服务的响应格式。哪个是解决此问题的最佳方法? 提前致谢。 问题答案: 您可以使用标准GWT调用REST服务(或者如果需要在另一个域上调用服务)。 随着JSON响应字符串,你可以调用获得,它可以是一个,等等,这是在所有可用的这个包。

  • 我正在使用用于ReST web服务的Spring框架Tomcat7。我正在尝试使用Spring RestTemplate调用https web服务。我得到以下错误: 找不到请求目标的有效认证路径;嵌套的异常是javax。网ssl。例外:太阳。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderExcept

  • 问题内容: 我目前正在使用HTTP方法来调用一些URL,这将导致JIRA问题。 现在,我想使用Apache Camel,该如何使用? 我需要通过骆驼调用以下链接: 由于我是Camel的新手,因此也请提出一些解决方案和示例。 谢谢 问题答案: 您可以轻松使用CXFRS组件;如果出于某种原因需要使用HTTP组件进行操作,则也可以轻松地使用它: 当然,在到达路由的这一部分之前,您将需要使用标头来丰富您的

  • 我有一个iOS应用程序,可以从JSON的restful web服务中同步数据。此方法是从外部类(而不是UI控制器)调用的。这个类有一个sync方法,它可以毫无问题地发送和检索数据。我的问题是如何暂停UI,直到得到结果。 下面将提供有关代码的想法。 UIController类 同步类 我已经尝试过方法,但我相信我不知道如何使用,到目前为止,因为大多数例子都关闭了服务 感谢您的任何帮助。谢谢

  • 嗨,我使用restFul web服务服务器端代码公开的服务是 @requestmapping(value=“/getPerson”,method=requestmethod.post)public ModelAndView getPerson(@requestparam(“inputXml”)String inputXml){ ----------------------------------

  • 我在这里阅读了以下内容: Swagger 目前没有从客户端或服务器的角度包含支持多个 API 版本的建议 — 声明了版本控制信息(规范和底层 API 实现)。 我想知道的是如何配置swagger UI以显示多个服务的API,即驻留在不同服务器上的服务。我尝试在不同的服务器上配置swagger UI,但出现以下错误: 无法从服务器读取。它可能没有适当的访问控制源设置。 我读过关于在服务器上启用COR