我见过这个建议我可以根据用户构建不同的视图: different json views for the same entity
然而在asp web api中,我使用的是Model类,我不能随便添加新的属性。
所以,例如我可能有uri:
http://host/api/products/id
返回模型:
public class Product{
public string Code { get; set; }
public string Description { get; set; }
}
但是出于另一个目的,我想添加更多信息,假设这很昂贵,因为它加入其他数据来构建模型,或者以非常特定的方式格式化数据:
http://host/api/productsspecial/id
返回模型:
public class ProductSpecial{
public string Code { get; set; }
public string Description { get; set; }
public decimal Price { get; set; } //assume expensive to look up
}
显然我有办法做到这一点,两个不同的控制器,返回不同的数据视图。我的问题是,这是好还是有更好的方法?
无论如何,我可以这样做:http://host/api/products/id?includeprice=true
并使用它来返回替代模型?这是一个好主意吗?
答案 0 :(得分:1)
我建议
GET /host/api/products/{id}?fields=code,description,price
您应该避免以您描述的方式使资源URL复杂化。每个可能的值配置都需要一个新名称:“productsReallySpecial”等。
?includePrice = true的问题是你有可能想要使每个变量成为可选项的参数。您的文档可以列出默认返回值和可用的返回值。