2

我已经看到这表明我可以根据用户构建不同的视图: 同一实体的不同 json 视图

然而,在 asp web api 中,一个使用模型类,我不能随便添加新属性。

所以,例如我可能有 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并使用它来返回替代模型?这是个好主意吗?

4

1 回答 1

1

我会建议

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

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

?includePrice=true 的问题在于,您可能希望为每个变量设置一个参数,使其成为可选参数。您的文档可以列出默认返回值和可用的返回值。

于 2013-09-13T13:54:47.977 回答