我正在尝试了解RESTful Web 服务页面 274 部分HTTP PUT
。对PUT
不存在的资源进行发布会创建资源。如果PUT
导致现有资源移动,则返回HTTP 301(永久移动)和新位置。对旧 URI 的请求返回 HTTP 301、404 或 410。
我的问题是关于返回HTTP 301
。这似乎意味着资源永远保留旧 URI 的所有权。
考虑:/companies/{companyName}/departments/{departmentName}
我看到使用以下好处HTTP 301
:
- 并发:如果一个用户重命名一家公司,而另一个用户正在导航到一个部门,尽管他们没有做错任何事情,但后者将获得 HTTP 404。
HTTP 301
允许我们无缝地将第二个用户重定向到新的 URI。 - 书签:人类和计算机都需要为 URI 添加书签以进行长期存储。人类在讨论论坛中发布链接。计算机将 URI 用于缓存目的和用户偏好。
我看到以下问题HTTP 301
:
- 阻止长期资源演变:在其生命周期内,部门
A
被重命名为B
和。几年后,有人想创建部门,但被. 公平地说,我想不出任何会发生这种情况的实际例子,所以也许这不是问题。C
D
A
D
- API 版本限制了它的使用:随着新 API 版本的发布和旧版本的删除,甚至根资源也会随着时间而变化。
HTTP 301
如果客户端不能以与旧资源相同的方式访问新资源,那么返回有什么意义?
什么是适当的行动方案?URL 层次结构是否应该以不同的方式建模?行为/反应应该不同吗?