使用 2 个或更多模型创建 API

Create an API using 2 Models or more

我是 asp.net API 的新手,开始从在线教程和 Stack Overflow 中找出答案。

我遇到了这样一种情况,我需要为 Member_Product table 构建一个 API,其中注册了会员和其他产品购买的交易,以便提取成员某种产品我必须让另一个 table 称为 Product_type。

据我所知,您可以为单个控制器使用一个模型来围绕它构建 API。我仍然对此感到困惑,因为在我的情况下我必须使用 more than on。

请问这方面的最佳实践是什么以及如何正确实施它,如果有任何我必须阅读但我错过了的内容,非常感谢您提供 link。

我使用了一个空控制器,并通过单个 LINQ 查询在内部使用了两个模型。在成员控制器的代码下方:

private readonly dboFFEntities FitnessDbo = new dboFFEntities();
[HttpGet]
[Route("Members/activeMembers/")]
public int GetLiveMembers()
{
  using (FitnessDbo)
    {
        var LiveMemebersCount = (from mp in FitnessDbo.memberproductinfoes
                                         join pt in FitnessDbo.product_type   on mp.mepi_prodtype equals pt.prty_typeid.ToString()
                                         where pt.prty_name == "MEMBERSHIP" &&
                                         (mp.mepi_status == "1" || mp.mepi_status == "3" || mp.mepi_status == "6")
                                         select mp.mepi_memberid).Distinct().Count();
                return LiveMemebersCount;
            }
        }

答案是DTO。

API 控制器未绑定到数据库模型或任何其他模型。它代表一个实体。只要 API 设计良好,控制器应该访问多少 table 就没有 restriction/convention。

Member_Product好像是Junction/Pivottable.

IMO 你不需要一个单独的 API 控制器用于连接 tables。

您可以在 Members 控制器中为通过的成员创建 return 产品的端点。

例如

  • api/products - Returns 数据库中的所有产品(你可能不想要这个)

  • api/products/{productId} - Returns 已传递 ID 的单个产品。

  • api/members - Return所有成员(不含产品)

  • api/members/{memberId}/products - Return 已通过会员的所有产品。

理想情况下,您不应该 return DB 模型响应。创建包含客户端所需的所有处理信息的DTO。

例如 产品 DTO 应仅包含有关产品的必需信息,不应包含供内部使用且不会被客户使用的信息。 成员 DTO 应仅包含成员信息。 Member_Product (api/members/{memberId}/products) 端点的 DTO 应包含有关产品 + 会员的所有信息。

这个问题有很多文章可以参考