是否使用魔术(我/自己)资源标识符违反REST原则?

Ema*_*gan 16 rest web-services restful-url

我已经看到了为经过身份验证的用户支持魔术ID的URI,如下所示:

GET /user/me - list my profile
GET /user/me/photos - list my photos
Run Code Online (Sandbox Code Playgroud)

下面的那些使用实际的用户ID

GET /user/742924
GET /user/742924/photos
Run Code Online (Sandbox Code Playgroud)

我看到的问题是,相同的资源ID指向不同的资源,具体取决于经过身份验证的用户.

这违反任何REST原则吗?

cas*_*lin 19

从REST角度来看/me,使用命名与经过身份验证的用户相对应的资源是完全正确的.根据Roy Thomas Fielding的论文,任何可以命名的信息都可以是一种资源:

5.2.1.1资源和资源标识符

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

使用时/me,你必须为定位器验证的用户,它总是识别的概念的的身份验证的用户,不管是哪个用户进行身份验证.

  • @Traxo很抱歉没有澄清.我会用`/ users/me/photos` :) (2认同)

yur*_*s87 5

虽然我同意Cassio,但我认为他没有选择论文中最好的引用,因为这是一个更具有特定标识符的部分:

REST中资源的定义基于一个简单的前提:标识符应尽可能不经常更改.因为Web使用嵌入式标识符而不是链接服务器,所以作者需要一个与超媒体引用紧密匹配的语义标识符,允许引用保持静态,即使访问该引用的结果可能随时间而变化. REST通过将资源定义为作者想要识别的语义来实现这一点,而不是在创建引用时与这些语义相对应的值.然后将其留给作者以确保为引用选择的标识符确实标识了预期的语义.

如果您连接点,登录用户就是一个例子 - 对不同结果内容的相同引用.