具有可配置列定义的Api响应结构

时间:2016-10-18 01:31:51

标签: rest api asp.net-web-api restful-architecture api-design

我正在为学生申请系统构建一个申请,允许多个组织向其学生提供在线申请表申请课程。 对于每个应用程序,它将具有ID,StudentName,CourseName。但是,有些大学需要SecondaryExamMark,有些需要参考名称和参考联系号。

我正在进行API调用(/ application / list?pageNo = 1& rowsPerPage = 20& orgId = 1) 并返回所有具有公共信息的应用程序数据以及基于提供的组织ID的额外要求

我定义了一个应用程序模型,其中包括所有组织请求的所有常见属性和属性子集,并将它们存储在单个数据库表中,并为不同的组织提供一些可空字段。

就Api响应结构而言,以下哪项更合适?

static int promptForInt(String prompt, int min, int max){
        System.out.println(prompt);
        String input = in.readLine();
        int parsedInt = Integer.parseInt(input);
        while(!(parsedInt > min && parsedInt < max)){
            System.out.println("Your input is invalid. " + prompt);
            input = in.readLine();
            parsedInt = Integer.parseInt(input);
        }
        return parsedInt;
    }

OR

{
    ID: 1,
    StudentName: 'A B',
    CourseName: 'B C',
    ReferenceName: null,
    ReferenceContact: null,
    SecondarySchoolMark: '80'
}

第一种方法似乎是一般的Api结构,它返回描述应用程序的对象。然而,第二种方法允许Api决定应该呈现哪些列,并且UI只需要将响应视为显示字段。

IMO,我更喜欢第一种方法,因为为了使API能够与其他客户端集成,API应该提供基于资源的响应。并显示或隐藏列(无论是基于对/ getdisplaycolumns的另一个Api调用?orgId = 1还是仅将空列视为隐藏是UI的责任)

编辑1 :不一定从方法中返回null属性,因为Json序列化程序允许忽略null属性)

1 个答案:

答案 0 :(得分:0)

我同意,建立一个具有几个可空属性的模型(资源),客户端可以忽略这些属性听起来像一个更强大的设计(强类型属性!),而不是将第二个模型反序列化为各种类型的字典和与此合作。