【问题标题】:Api response structure with configurable columns definitions具有可配置列定义的 API 响应结构
【发布时间】: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


    【解决方案1】:

    我同意,选择一个模型(资源),它有几个客户可以忽略的可空属性,这听起来比将第二个模型反序列化到各种字典中更健壮的设计(强类型属性!)使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多