改变uri slug时,PATCH与PUT的uri不同

问题描述 投票:0回答:1

在适当的REST API实现中,假设我正在编写一个API来让用户修改uri slug,例如将/acme/first更改为/acme/second

取决于我提交的部分记录(patch)或目前代表put的整个记录​​(first),uri是否应该变化?

例如:

PUT /acme/second
{ [...], "current-slug": "first", "color": "blue" }

反对新的uri,因为put意味着“这就在这里。”

PATCH /acme/first
{ "new-slug": "second", "color": "blue" }

补丁对旧的uri,因为patch意味着“修改那里的东西。”

我怀疑这是一个边缘情况,但很有趣,因为几乎所有文档都恰好显示了putpatch动作相同的uri,尽管显然post通常是不同的uri。

rest api-design restful-url http-put http-patch
1个回答
1
投票

这绝对是一个边缘案例。一个明显的HTTP方法,实际上只是HTTP MOVE方法。这个方法来自WebDAV,但它应该可以在任何地方使用。

MOVE /acme/first HTTP/1.1
Destination: /acme/second

这将是我的最佳建议,因为它非常适合这个问题。

PATCHPUT的奇怪之处在于它们都希望更新目标uri上的资源,但操作的结果更类似于DELETE,因为它会删除资源(并在其他地方创建一个新资源)。

因此,我倾向于建议不要使用这种情况。这足以保证特殊的POST请求的边缘情况。

但是... MOVE是完美的。任何不深入理解MOVE语义的HTTP客户端或服务器都应该将其视为类似于POST(不安全,不是幂等)。

© www.soinside.com 2019 - 2024. All rights reserved.