使用 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 应包含有关产品 + 会员的所有信息。
这个问题有很多文章可以参考
- https://medium.com/@factoryhr/how-to-build-a-good-api-relationships-and-endpoints-8b07aa37097c
- ViewModels in MVC / MVVM / Separation of layers- best practices?
我是 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 应包含有关产品 + 会员的所有信息。
这个问题有很多文章可以参考
- https://medium.com/@factoryhr/how-to-build-a-good-api-relationships-and-endpoints-8b07aa37097c
- ViewModels in MVC / MVVM / Separation of layers- best practices?