Web Api端点复杂对象与简单平面对象的最佳实践

时间:2013-02-16 15:46:53

标签: asp.net-mvc asp.net-web-api

在ASP.NET Web Api中提供资源的最佳方法是什么?他们是否有任何参考或指导?

让我们说例如我们有一个人。

选项1:

{
  "Personalia": {
    "CitizenServiceNumber": "23443342",
    "FirstName": "John",
    "LastName": "Web",
    "Gender": "Male",
    "DateOfBirth": "1965-02-16",
  },
  "Spouse": {
    "FirstName": "Emily",
    "LastName": "Web",
    "Gender": "Female",
    "DateOfBirth": "1968-02-16"
  },
  "Address": {
    "HouseNumber": "565",
    "Street": "Somewherestreet"
  }
}
  • 专业易于阅读
  • Con 我们需要多个班级/模特(人,个人,配偶,地址)来获取/发布/投放一个人

选项2:

{
    "CitizenServiceNumber": "23443342",
    "FirstName": "John",
    "LastName": "Web",
    "Gender": "Male",
    "DateOfBirth": "1965-02-16",
    "SpouseFirstName": "Emily",
    "SpouseLastName": "Web",
    "SpouseGender": "Female",
    "SpouseDateOfBirth": "1968-02-16",
    "HouseNumber": "565",
    "Street": "Somewherestreet"
}
  • 专业我们只需要1个课程
  • Con 它的可读性/结构性较差,尤其是对于包含更多数据的类

这是一个相当简单的例子,但问题仍然是一个更复杂的类。

1 个答案:

答案 0 :(得分:3)

我会选择第一个选项。你不应该担心有很多对象。这些被称为视图模型,完全用于此目的。除此之外,你可以在API的其他部分重用这些对象的某些部分,在那里你可能需要地址,人员等......

如果您仔细查看此JSON字符串,实际上不需要PersonPersonaliaSpouse个对象来映射此结构。单个Person对象就足够了。

例如,您的API控制器操作所采用的视图模型可能如下所示:

public class MyViewModel
{
    public PersonViewModel Personalia { get; set; }
    public PersonViewModel Spouse { get; set; }
    public AddressViewModel Address { get; set; }
}