更换uri塞子时PATCH与PUT的不同uri

时间:2019-04-25 14:51:47

标签: rest api-design restful-url http-put http-patch

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

根据我要提交的是当前代表patch的部分记录(put)还是整个记录(first),uri是否应有所不同?

例如:

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

new uri放在相对位置,因为put的意思是“这是这里。”

vs。

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

针对 old uri进行补丁,因为patch的意思是“修改此处的内容。”

我怀疑这是一个极端情况,但是很有趣,因为实际上putpatch的所有文档碰巧都显示了相同的uri,尽管显然post通常是另一个uri。

1 个答案:

答案 0 :(得分:1)

这肯定是个边缘情况。一种明显的HTTP方法实际上就是HTTP MOVE方法。此方法来自WebDAV,但应该可以在任何地方使用。

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

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

PATCHPUT都奇怪的是,他们俩都希望在目标uri上更新资源 ,但是结果操作的过程与DELETE更为相似,因为它删除了资源(并在其他地方创建了一个新资源)。

因此,我倾向于建议在这种情况下都不使用。这足以满足特殊的POST请求。

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