我的合作伙伴和我正在开发一个webapp,我们将Spring后端逻辑公开为Restful API。我们的类具有各种多对一/一对多关系,但并非所有前端用例都需要一个类中的所有信息。
一个例子:说[GET] /api/v1/person
返回一个人员列表。该调用还支持通过pageSize
,page
,sortColumn
和sortDirection
参数进行排序和分页。检索person
个对象时,某些前端功能只需要id和name,其他功能需要更多详细信息,最后一组功能需要完整的详细信息(包括一对多关系对象)。
似乎有两种方法可以实现这一点 - 或者进行3次返回所需@JsonView()
数据的特定调用
[GET] /api/v1/person/feature1
[GET] /api/v1/person/feature2
[GET] /api/v1/person/feature3
或允许一个额外的view
参数,让用户选择给定请求所需的特定视图
[GET] /api/v1/person?view=basic
[GET] /api/v1/person?view=detailed
[GET] /api/v1/person?view=full
目前我们选择了第二种方法,因为它似乎提供了更大的灵活性。它还减少了我们需要维护的REST控制器方法的数量。
所以我的问题是这个问题是否有最好的做法。传递view
param似乎非常灵活,但与此同时似乎没有其他人使用这种方法,所以我们认为可能我们做错了。
只是想检查是否有一种完善的“正确”方法来过滤结果对象的列 - 单独的特定调用或带有view
参数的常规API调用。
提前致谢!