就 RESTful 和无状态而言,拥有 /currentUser 等 REST 资源是否合法?

2024-04-20

就 RESTful 和无状态而言,拥有这样的资源是相当合法的

/用户/123

但是,问题是:拥有省略用户 ID 并假设它是从用户会话在服务器上隐式解析的资源是否合法?例如:

/loggedUser

当标识符为 123 的用户被授权时,该资源将指向 /users/123。


选择资源定位器

Using /me, /users/me, /users/myself, /users/current或类似的 URI 来标识对应于的资源经过身份验证的用户从 REST 角度来看完全没问题。根据罗伊·托马斯·菲尔丁的论文,任何可以命名的信息都可以是资源:

5.2.1.1 资源和资源标识符 https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_1

REST 中信息的关键抽象是resource。任何可以命名的信息都可以是资源:文档或图像、临时服务(例如“洛杉矶今天的天气”)、其他资源的集合、非虚拟对象(例如人)等等。换句话说,任何可能成为作者超文本参考目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体。 [...]

当使用上面提到的 URI 时,您有一个标识符经过身份验证的用户并且它总是会识别concept of an 经过身份验证的用户,无论哪个用户经过身份验证。

无状态约束

The 无国籍的约束与您的资源的识别方式无关。无状态约束是指不在服务器端存储任何会话状态。在这种方法中,从客户端到服务器的每个请求都必须包含服务器能够理解的所有必要信息。

请参阅菲尔丁论文中的以下引用:

5.1.3 无状态 https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_3

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

例如,当针对需要身份验证的受保护资源时,每个请求都必须包含正确验证/授权的所有必要数据.


类似问题已回答here https://stackoverflow.com/a/35724570/1426227 and here https://stackoverflow.com/a/36522727/1426227.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

就 RESTful 和无状态而言,拥有 /currentUser 等 REST 资源是否合法? 的相关文章

随机推荐