3

我正在启动一个 REST API 来制作一个 Web 应用程序。

大多数网站都会告诉您删除向DELETEURI 发出 HTTP 请求的资源,例如/{resource}/{resource-id}. 我害怕删除一些在我检索后可能已经更新的资源,甚至是错误的资源。

要求将资源的时间戳与请求一起发送可以吗?我没有在任何地方看到它,但我认为它可能非常有用。它将检查并发性并防止删除随机资源,甚至之前检索它们。

4

1 回答 1

7

将 HTTP 标头ETagIf-Match您的DELETE请求一起使用。

客户端GET资源:

GET /things/42

服务器响应:

200 OK
ETag: "foo-bar-baz"

客户想要的DELETE资源:

DELETE /things/42
If-Match: "foo-bar-baz"

案例1:事物42没有改变,可以删除。服务器响应:

410 Gone

案例 2:事物 42 已更改,与ETag: "foo-bar-baz". 它没有被删除,服务器回复:

409 Conflict

变体:

您还可以使用标头Last-ModifiedandIf-Unmodified-Since代替 and 或附加于ETagand If-Match

请参阅超文本传输​​协议 (HTTP) 状态代码注册表

于 2012-11-06T13:06:22.630 回答