我应该在同一个REST实体上提供不同的视图吗?

时间:2013-09-13 13:48:44

标签: rest asp.net-web-api

我见过这个建议我可以根据用户构建不同的视图: 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并使用它来返回替代模型?这是一个好主意吗?

1 个答案:

答案 0 :(得分:1)

我建议

GET /host/api/products/{id}?fields=code,description,price

您应该避免以您描述的方式使资源URL复杂化。每个可能的值配置都需要一个新名称:“productsReallySpecial”等。

?includePrice = true的问题是你有可能想要使每个变量成为可选项的参数。您的文档可以列出默认返回值和可用的返回值。