Rails API最佳设计方案:查询指定用户关联的全部学校记录
Rails API 获取用户关联学校的最优路由设计方案
按照RESTful API设计规范和Rails官方路由惯例,最优实现方案选择如下:
最优方案:使用嵌套资源路由,绑定到SchoolsController的index动作
你只需要在路由文件中配置嵌套资源即可,不需要新增自定义路由,也不需要额外创建控制器:
# config/routes.rb resources :users do # 仅保留查询用户关联学校列表的接口 resources :schools, only: [:index] end
生成的路由规则为 GET /users/:user_id/schools,完全满足需求:
- 语义清晰:接口路径直接表达「获取指定ID用户关联的学校列表」的含义,前端不需要额外查文档就能理解接口用途
- 职责分明:查询的核心资源是学校,所以放在SchoolsController处理,符合单一职责原则
- 符合Rails惯例:不需要写额外的自定义路由规则,后续维护成本极低
其他方案的弊端
- 不要在UsersController新增user-schools路由:UsersController的职责是处理用户资源本身的CRUD操作,把跨资源的查询逻辑放在这里会导致控制器职责混乱,后续迭代容易出现冗余代码
- 不要单独创建user-schools控制器:只有当你需要操作「用户-学校」的关联关系本身(比如给用户绑定学校、解绑学校、修改关联属性)时,才需要单独创建关联资源的控制器,你现在只是查询用户下的学校列表,额外创建控制器只会增加代码冗余
- 不要在SchoolsController新增schools-user自定义路由:自定义命名路由不符合REST语义,其他开发者接手项目时很难快速理解接口用途,可维护性差
内容的提问来源于stack exchange,提问作者Marcel Degas
相关产品推荐
相关产品推荐

