一些 RESTful API 为调用者返回的数据量提供了选项,通常通过查询字符串参数(例如 stackexchange 的过滤器参数)。
我想至少为返回的数据量提供某种程度的可配置性,也许不一定具有相同级别的灵活性(尽管我没有任何反对意见),但到了拥有单个视图模型不会成为可行的解决方案。
然而,我正在努力在 Web API 中找到一个好点来添加某种属性白/黑名单。这样做的适当方法是什么?
一些 RESTful API 为调用者返回的数据量提供了选项,通常通过查询字符串参数(例如 stackexchange 的过滤器参数)。
我想至少为返回的数据量提供某种程度的可配置性,也许不一定具有相同级别的灵活性(尽管我没有任何反对意见),但到了拥有单个视图模型不会成为可行的解决方案。
然而,我正在努力在 Web API 中找到一个好点来添加某种属性白/黑名单。这样做的适当方法是什么?
使用单个 DTO 完成返回字段子集的一种方法是为 DTO 中的可选属性设置可空类型。
[DataContract]
public class Dude
{
[DataMember]
public int Id { get; set; }
[DataMember(EmitDefaultValue = false)]
public string FirstName { get; set; }
[DataMember(EmitDefaultValue = false)]
public string MiddleName { get; set; }
[DataMember(EmitDefaultValue = false)]
public string LastName { get; set; }
[DataMember(EmitDefaultValue = false)]
public int? IQ { get; set; }
}
您将需要获取客户有兴趣在响应中查看的字段列表,并仅填充您返回的 DTO 实例中的字段列表,如下所示。
return new Dude() { Id = 123, FirstName = "Johnny" };
这将发送一个像{ "Id":123, "FirstName":"Johnny" }
. 当另一个客户要求说LastName
时,您将返回new Dude() { Id = 123, LastName = "Bravo" };
,JSON 将是{ "Id":123, "LastName":"Bravo" }
。
这适用于 XML 和 JSON。如果您只接受 JSON,则无需应用属性。只需要指示 JSON.NET 忽略空值。
config.Formatters.JsonFormatter.SerializerSettings =
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
如何获取字段列表的最后一部分将取决于您的 API 设计。您也许可以使用操作过滤器从请求中获取这些标准字段,并使用它从持久存储中获取数据。