【发布时间】:2017-02-27 03:09:23
【问题描述】:
我正在为学生申请系统构建一个应用程序,该系统允许多个组织向其学生提供在线申请表以申请课程。 对于每个应用程序,它将具有 ID、StudentName、CourseName。但是有些大学需要 SecondaryExamMark,有些需要参考姓名和参考联系号码。
我正在调用 API (/application/list?pageNo=1&rowsPerPage=20&orgId=1) 并根据提供的组织 ID 返回所有应用程序数据以及通用信息以及额外要求
我定义了一个应用程序模型,其中包括所有常见属性以及所有组织请求的属性子集,并将它们存储在单个数据库表中,其中包含不同组织的一些可空字段。
就Api响应结构而言,以下哪个更合适?
{
ID: 1,
StudentName: 'A B',
CourseName: 'B C',
ReferenceName: null,
ReferenceContact: null,
SecondarySchoolMark: '80'
}
或
{
headers: [
{
Title: "ID",
Type: "text"
},
{
Title: "StudentName",
Type: "text"
},
{
Title: "CourseName",
Type: "text"
},
{
Title: "SecondarySchoolMark",
Type: "text"
}
],
application: [
{
Title: "ID",
Value: "12345"
},
{
Title: "StudentName",
Value: "A B"
},
{
Title: "CourseName",
Value: 'B C'
}
{
Title: 'SecondarySchoolMark',
Value: '80'
}
]
}
第一种方法似乎是一个通用的 Api 结构,它返回一个描述应用程序的对象。然而,第二种方法允许 Api 决定应该呈现哪些列,而 UI 只需要将响应视为显示字段。
IMO,我更喜欢第一种方法,因为为了使 API 可以与其他客户端集成,API 应该提供基于资源的响应。并显示或隐藏列(无论是基于对 /getdisplaycolumns?orgId=1 的另一个 Api 调用还是仅将空列视为隐藏是 UI 的责任)
编辑 1:不一定从方法一返回 null 属性,因为 Json 序列化程序允许忽略 null 属性)
【问题讨论】:
标签: rest api asp.net-web-api restful-architecture api-design