REST API查询单资源时是否需要返回全部嵌套关联资源?
结论:这种设计完全符合REST设计规范,属于行业内普遍推荐的实践方案
符合规范的核心依据:
REST架构的核心要求之一就是不同的资源/资源集合对应唯一的独立URI,你提到的两个接口正好匹配了两类不同的资源定位逻辑:
GET /users/1对应的是「ID为1的用户」这个主资源,返回用户核心基础属性即可,不需要默认携带关联的子资源数据,对应你给出的第二种响应结构是完全合理的GET /users/1/discussions对应的是「ID为1的用户关联的讨论集合」这个层级子资源,单独暴露URI、单独查询既符合REST的资源层级语义,也有很多实际优势:- 降低基础接口的响应体积:如果用户关联的讨论数据量很大,不需要在查询用户基础信息时返回冗余内容,减少传输耗时
- 提升使用灵活性:调用方可以按需加载数据,比如用户列表页只拉取用户基础信息,进入用户详情页再加载讨论数据,不需要做多余的字段裁剪
- 降低迭代维护成本:两个接口职责单一,后续调整用户基础字段、或者给讨论接口加分页、筛选能力都可以独立迭代,不会互相影响
如果有场景需要同时获取用户基础信息和关联讨论,也可以通过可选的查询参数扩展能力,比如支持GET /users/1?embed=discussions来返回带discussions字段的第一种结构,这也是通用的兼容方案,不会违反REST规范。
内容的提问来源于stack exchange,提问作者Nemanja Ilic
相关产品推荐
相关产品推荐

