【问题标题】:Create an API using 2 Models or more使用 2 个或更多模型创建 API
【发布时间】:2019-09-29 09:57:37
【问题描述】:

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

我遇到了一种情况,我需要为 Member_Product 表构建一个 API,其中注册了会员和其他产品购买的交易,并且为了提取具有某种产品的成员,我必须使用另一个名为 Product_type 的表.

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

请问关于这方面的最佳做法是什么以及如何正确实施它,如果有什么我必须阅读而我错过了,请提供有关它的链接。

我使用了一个空控制器,并通过一个 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;
            }
        }

【问题讨论】:

    标签: asp.net-mvc linq asp.net-web-api2


    【解决方案1】:

    答案是 DTO。

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

    Member_Product 似乎是一个 Junction/Pivot 表。

    IMO 你不需要为联结表单独的 API 控制器。

    您可以在 Members 控制器中创建一个端点来为通过的成员返回产品。

    例如

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

    • api/products/{productId} - 返回带有传递 ID 的单个产品。

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

    • api/members/{memberId}/products - 返回通过成员的所有产品。

    理想情况下,您不应返回数据库模型作为响应。创建包含客户端所需的所有已处理信息的 DTO。

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

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

    【讨论】:

    • 我已经按照您在此处指定的方式创建了我的 RESTful API,仍然在经历 MVVM 概念,并且您启发了我关于 DTO 的知识。非常感谢您提供的宝贵信息。
    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2018-12-04
    • 2012-06-14
    • 2020-10-08
    • 1970-01-01
    相关资源
    最近更新 更多