【问题标题】:what would be the best practice for http request in webapi project with softdelete带有软删除的Web api项目中http请求的最佳实践是什么
【发布时间】:2022-02-14 03:24:13
【问题描述】:

我正在开发一个 webapi .Net5 项目。我正在使用 SQLserver 和 EF5 来存储我的实体。我的每个实体都有一个名为IsDeleted 的属性,我将其用于remove(IsDeleted=true) 和restore(IsDeleted=false)。

我有点困惑我应该为我的删除/恢复端点使用哪种 http 请求方法。

  1. 我正在更新我的实体的一部分 (isdeleted),所以我在考虑 PATCH
  2. 我也不想向客户展示我正在执行软删除,然后对于删除,我在考虑 DELETE 但我真的没有从我的资源中删除任何实体
  3. 我也在考虑PUT,但在这两种情况下,我都没有任何请求正文,因此PUT 方法没有任何正文是非常罕见的。
  4. 我在一些 StackOverflow 问题和答案中看到,他们建议在使用软删除时使用 POST 方法进行还原和 DELETE 删除,但我并没有真正理解为什么。

任何人都知道这样做的正确方法是什么以及为什么?

【问题讨论】:

    标签: httprequest asp.net-core-webapi soft-delete


    【解决方案1】:

    使用 HTTP DELETE 更新 IsDeleted = true 取决于您作为 API 设计者。没有法律规定 HTTP DELETE 必须硬删除它所指的任何内容。

    如果客户不知道您正在软删除记录,则使用DELETE 是完全合适的。

    我使用具有软删除功能的系统,但它并未对客户端应用程序/用户隐藏。因此,要软删除,它可以是对api/some_endpoint/24601api/some_endpoint/24601 请求,负载中包含"status": "ARCHIVED",或者是对api/some_endpoint/24601/actionsPOST 请求,具有类似的负载。 (PATCH 可能比 PUT 更合适,但 API 设计者始终坚持使用 PUT。)

    【讨论】:

    • 谢谢杰克。因此,我们总是有一个用于删除/恢复的端点,但具有不同的有效负载,对吧?
    • 是的,这是一种方法,让客户端/用户软删除和恢复!
    • 我现在做的是有两个端点:1- PUT api/remove/{id} 2- PUT api/restore/{id} 两个端点都没有请求负载。对于软删除和恢复,我需要执行一些逻辑,例如检查属性是否具有现有的依赖实体,并且对于恢复需要在恢复实体之前检查大量逻辑我现在正在做什么或应该做的场景有问题吗?如您已经提到的,将其修改为具有状态主体的 PUT 方法(如果我理解得很好,请使用具有状态属性的有效负载,存档用于删除和恢复用于恢复)。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2010-09-09
    • 2018-10-18
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多