我想了解RESTful Web Services第274部分HTTP PUT
。针对不存在的资源颁发PUT
将创建该资源。如果PUT
导致现有资源移动,则返回HTTP 301 (Moved Permanently)与新位置。请求旧URI返回HTTP 301,404或410.REST风格的设计:应该重新命名的资源永远封锁旧的URI吗?
我的问题是关于返回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层次结构应该以不同的方式建模吗?行为/反应应该不同吗?
“310”究竟是什么?我见过的唯一参考文献是'太多重定向' – Aesthete
@Aesthete,看起来像书中的一个错字。作者的意思是HTTP 301.我已经纠正了这个问题。 – Gili