Cyr*_* N. 7 api rest design-patterns
我正在围绕自己的API构建一个项目,到目前为止一切正常,但我想介绍DELO的UNDO操作.
到目前为止,DELETE以这种方式工作:
DELETE /contacts/:id
Run Code Online (Sandbox Code Playgroud)
我对UNDO的初始是在相同的URL上调用相同的DELETE,这将取消已删除的状态(如果此联系人处于删除状态),但我不知道这是否是一个好方法.
我看了这篇看起来很相似的帖子,但"结账"部分给出了我正在寻找的其他答案.
我的建议是好还是有更好的方法?
如果您使用DELETE
后续对资源的请求删除了资源,404 NOT FOUND
或者410 GONE
因为那里不再有资源接受请求.
如果可接受并且您具有可用状态,则最简单的答案是通过PUT
在已删除资源的URL处发出一个来重新创建资源.从语义上讲,这会创建一个新资源,替换任何现有状态,而不是真正撤消删除.
另一个简单的解决方案是承认您实际上并未删除资源,只是以某种方式更改其状态以显示它们已存档.这意味着您不能使用DELETE
动词,但您可以向资源发出PUT
或POST
请求在归档状态和活动状态之间进行更改.
如果要保留DELETE
作为删除记录的方法,则可以选择使用特殊show-archived
值来访问存档资源:
GET /contacts/<id>?show-archived=true
Run Code Online (Sandbox Code Playgroud)
在归档资源上指定此内容将返回200
已归档资源而不是其中一个40X
代码.它有点笨拙,因为你的资源现在有一个"超级"的问题,既存在又存在,取决于你如何观察它们.但它确实意味着您可以向资源发出更新其状态的请求:
PUT /contacts/<id>?show-archived=true
State=Active
... all other unchanged fields ...
Run Code Online (Sandbox Code Playgroud)