我正在围绕我自己的 API 构建一个项目,到目前为止一切正常,但我想为 DELETE 引入 UNDO 操作。
到目前为止, DELETE 是这样工作的:
DELETE /contacts/:id
我最初的 UNDO 是在同一个 url 上调用相同的 DELETE,这将取消已删除状态(如果此联系人处于已删除状态),但我不知道这是否是一个好方法。
我读了 this post看起来很相似,但“结帐”部分给出了我正在寻找的其他答案。
我的建议好还是有更好的方法?
最佳答案
如果您使用 DELETE
删除了资源对该资源的后续请求应返回 404 NOT FOUND
或 410 GONE
因为 那里不再有资源来接受请求。
如果可以接受并且您有可用的状态,最简单的答案是通过发出 PUT
简单地重新创建资源。在已删除资源的 URL 处。从语义上讲,这会创建一个新资源,替换任何现有状态,而不是真正撤消删除。
另一个简单的解决方案是承认您实际上并没有删除资源,而只是以某种方式更改它们的状态以表明它们已存档。这意味着您不能使用 DELETE
动词但你可以发出 PUT
或 POST
请求资源在存档和事件状态之间更改。
如果您想保留 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/