【问题标题】:Best Way to call WebAPI endpoint for child entity from Mobile and Web从移动和 Web 调用子实体的 Web API 端点的最佳方式
【发布时间】:2020-12-13 05:14:02
【问题描述】:

数据库中有两个表ItemItemExtras都有相似的表结构。 我们在 UI 中有两个价格字段,一个是 PriceExtrasPrice

商品价格和其他字段将保存在商品表中。 并且 ExtrasPrice 字段需要在 ItemExtras 表中插入新条目(如果存在)。

创建和请求端点 (CRUD) 的最佳方式是什么?

  1. 为 Item 和 ItemExtras 创建两个单独的端点
  2. 为两者创建两个单独的端点,但从 Item 端点处理 ItemExtras CRUD(通过调用端点)。
  3. 创建处理两个表 CRUD 的端点。

【问题讨论】:

  • 您想公开 ItemExtras 以供公开访问还是从您的前端访问?
  • 视需求而定,目前无需求。所以要求最好的方式。

标签: asp.net-web-api asp.net-core-webapi endpoint webapi


【解决方案1】:

通常取决于领域逻辑和要求。由于没有,而您正在寻求最好的方法,因此这是我对此的看法:

由于 ItemExtras 是 Item 的子实体,因此您永远不能在没有 Item 的情况下创建或更新 ItemExtras。如果没有父项记录,数据库中的 ItemExtras 记录将是什么意思?

我会选择一个端点来创建整个 Item 对象,包括 ItemExtras。像这样的:

POST /api/items

您可以创建两个端点来为 API 的客户端提供灵活性,但可能要避免进行两次 API 调用。如果创建 ItemExtras 的 API 调用成功,但创建 Item 的 API 调用失败怎么办?然后,您的数据库中有“不正确”的数据,如前所述(没有 Item 就没有 ItemExtras)。
从您自己的 API(您的选项二)调用另一个端点对我来说感觉很奇怪。如果它们无论如何都要相互调用,为什么还要有多个端点?

如果您需要更新 ItemExtras,而不更新有关 Item 本身的任何详细信息,您可以像这样创建端点:

PUT /api/items/{itemId}/ItemExtras/{itemExtrasId}

这还会强制 API 的客户端在更新 ItemExtras 记录之前拥有 Item 记录。

希望这是有道理的。

【讨论】:

    猜你喜欢
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多