API URL设计:路径/查询参数选型——通过Object B的ID获取Object A
接口URL设计方案分析
首先明确核心原则:RESTful API设计优先以资源和资源间的关系为核心,而非动作描述。针对你的场景(Object A与Object B为一对多,通过B的ID找所属A),逐个分析可选方案,并给出最优建议:
方案1:/objectA?objectBId=:id(查询参数)
- 语义:从Object A的集合中,过滤出与指定Object B关联的实例
- 优缺点:
- 优点:符合“集合过滤”的常规设计,若后续业务变更(比如出现一个B对应多个A的场景),接口无需调整就能兼容多结果返回
- 缺点:当前业务是一对多(一个B仅对应一个A),但该接口的语义是“查询集合”,与实际返回单个资源的结果存在轻微语义偏差;另外,用户需要理解“通过B的ID过滤A”的逻辑,不如直接关联资源的路径直观
方案2:/objectA/fromObjectBId/:id(自定义路径参数)
- 语义:通过Object B的ID获取对应的Object A
- 优缺点:
- 优点:直接点明了接口的用途
- 缺点:路径中包含
fromObjectBId这类动作描述,违背REST以资源为核心的设计原则,URL结构不够简洁优雅,也不符合行业通用的API设计习惯
最优推荐:/objectB/:id/objectA(关联资源路径)
- 语义:先定位到ID为
:id的Object B资源,再获取它所属的Object A资源 - 优势:
- 完全贴合REST资源关系的设计逻辑,语义清晰直观,开发者一眼就能理解这是“从某个Object B获取它的父Object A”
- 符合行业通用的关联资源访问范式(比如
/orders/:id/user表示获取某订单的所属用户) - 结构简洁,没有冗余的动作描述,维护性和可读性都更强
如果团队有统一的命名规范(比如用parent代替objectA),也可以调整为/objectB/:id/parent,只要保持语义一致即可。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

