qui*_*mes 12 c# asp.net-mvc json asp.net-web-api
我是API设计和MVC概念的新手,但据我所知,像GET/api/products这样的东西应该返回一个产品列表,而GET/api/products/1应该返回一个产品.在速度方面,我的感觉是/ api/products应该返回较少的信息,即id和name,而/ api/products/1应该返回更多,即id,name和description.
据我所知,处理此问题的最佳方法是不在/ api/products端点中返回产品类的某些字段.对于/ api/products?fields = name,这尤其必要.我正在使用ASP.Net Web Api 2并尝试了以下方法:
有什么简单的方法可以做我想做的事情吗?
否则你能建议一个比我正在做的更好的API设计吗?
您也可以使用WebApi.PartialResponse(http://www.nuget.org/packages/WebApi.PartialResponse/).这是我写的一个包,它使用LINQ to JSON(Json.NET)来操作返回的对象.它使用Google在其API中使用的字段语法,例如:
您可以在GitHub项目页面上找到更多信息:https://github.com/dotarj/PartialResponse.
我建议在返回实体列表时使用单独的类进行映射。
特别是因为问题不仅在于您返回给用户的内容,还在于您从数据库中选择的内容。
因此,使获取和实体返回一个 Product 对象,并获取实体列表返回一个 ProductLink 对象或类似的东西。
编辑
根据 jtlowe 的评论,如果您有许多不同的方法返回产品属性的细微变化,请使用匿名类(尽管我怀疑这是否一定是一个好的设计)。
在你的行动中考虑这样的事情
return from p in this.context.Products
select new
{
p.Id,
p.Name,
p.SKU
};
Run Code Online (Sandbox Code Playgroud)
这:
这并不容易将此语句的结果传递给其他方法,因为您只能将其作为 IEnumerable、对象或动态返回。如果您将其放入控制器中,那么它可能就足够了。如果您正在实现存储库模式,并且使用匿名类型,则将无法返回强类型列表。
| 归档时间: |
|
| 查看次数: |
5942 次 |
| 最近记录: |