Api 如何撤消删除操作并遵守RESTful标准?
我正在围绕我自己的API构建一个项目,到目前为止一切都正常,但我想为DELETE引入撤销操作 到目前为止,删除的工作方式如下:Api 如何撤消删除操作并遵守RESTful标准?,api,rest,design-patterns,Api,Rest,Design Patterns,我正在围绕我自己的API构建一个项目,到目前为止一切都正常,但我想为DELETE引入撤销操作 到目前为止,删除的工作方式如下: DELETE /contacts/:id 我对撤销的最初想法是在同一url上调用相同的DELETE,这将取消已删除状态(如果此联系人处于已删除状态),但我不知道这是否是一种好方法 我读到的内容看起来很相似,但“结帐”部分给出的答案与我所寻找的不同 我的建议是好的还是有更好的方法?如果删除状态是表示的一部分,我个人会将撤消删除放在资源上,如果不是,则在操作上发布 该操作
DELETE /contacts/:id
我对撤销的最初想法是在同一url上调用相同的DELETE,这将取消已删除状态(如果此联系人处于已删除状态),但我不知道这是否是一种好方法
我读到的内容看起来很相似,但“结帐”部分给出的答案与我所寻找的不同
我的建议是好的还是有更好的方法?如果
删除状态是表示的一部分,我个人会将撤消删除
放在资源上,如果不是,则在操作上发布
该操作将如下所示:
POST /contact/id/action/[recover|reactivate] (or whatever you think is more descriptive for the action).
但这正是我认为最符合RESTFul的方式。如果您使用DELETE
删除了一个资源,那么对该资源的后续请求应该返回404 NOT FOUND
或410 GONE
,因为那里不再有可接受请求的资源。
如果可以接受并且状态可用,最简单的答案是通过在删除的资源的URL处发出PUT
来重新创建资源。从语义上讲,这将创建一个新资源,替换任何现有状态,而不是真正撤消删除
另一个简单的解决方案是承认您实际上并没有删除资源,而只是以某种方式更改它们的状态以显示它们已存档。这意味着您不能使用DELETE
动词,但可以向资源发出PUT
或POST
请求,以在存档状态和活动状态之间进行更改
如果要保留DELETE
作为删除记录的方法,则可以使用特殊的show archived
值来访问存档资源:
GET /contacts/<id>?show-archived=true
显然,在url中使用动词不是RESTFul标准。谓词只能出现在方法+1中-另一个细微的变化是补丁,因为您在逻辑上只是更新部分资源(在本例中,它是已删除/已存档状态)PATCH
非常适合这种类型的请求,但是对它的支持不同;对于HTTP谓词家族来说,这是非常新的。
PUT /contacts/<id>?show-archived=true
State=Active
... all other unchanged fields ...