RESTful架构中的给定URI是否应始终返回相同的响应?

kei*_*ant 8 rest uri

这是对这个问题的一个后续问题.

那么对于任何给定的URI,RESTful架构的核心租户是否有独特的响应?这里有很多讨论倾向于这个方向,但我没有把它看作是一个"硬而快"的规则.

我理解它的价值(用于缓存,抓取,传递链接等),但我也看到像twitter API这样的东西违反了它(请求http://api.twitter.com/1/statuses/friends_timeline.xml会根据给定的用户名而有所不同),我知道有时它会可能是必要的 - 更不用说按时间顺序分页的资源也会随着新元素的添加而改变.

我是否应该努力从相同的URI中完全消除不同的响应,或者我只是接受有时它不实用,并且只要我最小化它的发生,我将处于合适的状态.

Yan*_*eau 2

不是相同的响应,而是相同资源的表示(取决于 conneg 和条件请求标头)。在 Rest 架构中,一个 URI 标识一个且仅一个资源(但一个资源可以有多个 URI)。根据授权用户(HTTP Auth、cookies 等)提供不同的资源是不好的做法,因为相同的 URI 代表每个用户不同的资源,如 Twitter 示例中所示。我无法允许您查看我的时间线并为您提供 URI,因为这与您的时间线的 URI 相同。用户必须在 URI 中进行编码,并且访问受到授权机制的限制。要让单个访问点根据经过身份验证的用户提供不同的资源,请使用重定向(例如 303 See Other、302 Found,...)

  • 如果 /my/things 和 /users/123/things 应该代表相同的资源,那么只有一个应该返回 200,另一个应该返回 303 See Other。 (2认同)