1

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

取决于我是提交当前代表的部分记录 ( patch) 还是整个记录 ( ), uri 是否应该有所不同?putfirst

例如:

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

反对的uri,因为put意思是“这里有”。

对比

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

修补的uri 因为patch意味着“修改这里的东西”。

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

4

1 回答 1

2

这绝对是一个边缘案例。一种显而易见的 HTTP 方法实际上就是 HTTPMOVE方法。此方法来自 WebDAV,但它应该适用于任何地方。

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

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

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

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

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

于 2019-04-25T14:59:45.680 回答