gpt4 book ai didi

api - 如何撤消 DELETE 操作并遵守 RESTful 标准?

转载 作者:行者123 更新时间:2023-12-04 11:54:17 25 4
gpt4 key购买 nike

我正在围绕我自己的 API 构建一个项目,到目前为止一切正常,但我想为 DELETE 引入 UNDO 操作。

到目前为止, DELETE 是这样工作的:

DELETE /contacts/:id

我最初的 UNDO 是在同一个 url 上调用相同的 DELETE,这将取消已删除状态(如果此联系人处于已删除状态),但我不知道这是否是一个好方法。

我读了 this post看起来很相似,但“结帐”部分给出了我正在寻找的其他答案。

我的建议好还是有更好的方法?

最佳答案

如果您使用 DELETE 删除了资源对该资源的后续请求应返回 404 NOT FOUND410 GONE因为 那里不再有资源来接受请求。

如果可以接受并且您有可用的状态,最简单的答案是通过发出 PUT 简单地重新创建资源。在已删除资源的 URL 处。从语义上讲,这会创建一个新资源,替换任何现有状态,而不是真正撤消删除。

另一个简单的解决方案是承认您实际上并没有删除资源,而只是以某种方式更改它们的状态以表明它们已存档。这意味着您不能使用 DELETE动词但你可以发出 PUTPOST请求资源在存档和事件状态之间更改。

如果您想保留 DELETE作为删除记录的方法,一个选项是通过使用特殊的 show-archived 来访问存档资源成为可能。值(value):

GET /contacts/<id>?show-archived=true

在存档资源上指定此项将返回 200在存档资源上而不是 40X 之一代码。这有点麻烦,因为您的资源现在有一个“超状态”问题,即存在和不存在都取决于您观察它们的方式。但是,这确实意味着您可以向资源发出请求以更新其状态:
PUT /contacts/<id>?show-archived=true

State=Active
... all other unchanged fields ...

关于api - 如何撤消 DELETE 操作并遵守 RESTful 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com