Rails 最佳 API 设计以获取与特定用户关联的所有记录

Rails Best API design to get all of a record associated with a certain user

这主要是一个 api 设计问题。我有一个 Rails api,它有用户路线和学校路线。我想从我的前端应用程序调用 api 参数为 UserId,returns 所有与该用户关联的学校。

最好的方法是什么?我应该在 UsersController 中创建一个名为 user-schools 的新路由吗?或者 SchoolsController 中的一条新路线叫做 schools-user?或者创建一个名为 user-schools 的全新控制器?感谢您的指导!

PS:从控制器中的ActiveRecord 获取记录不是问题。问题是如何最好地设计这个 api.

RESTful 的定义方式是通过 nested route:

GET /users/:user_id/schools

相同的基本设计原则适用于 API 和“经典”应用程序。

您可以通过嵌套调用资源宏来定义它:

resources :users do
  resources :schools, only: [:index]
end

这会将 /users/:user_id/schools 路由到 SchoolsController#index。虽然您可以“嗅探” user_id 参数:

class SchoolsController
  # GET /schools
  # GET /users/1/schools
  def index
    schools = if params[:user_id].present?
      user = User.find(params[:user_id])
      user.schools 
    else
      School.all
    end
    render json: schools
  end
end

更简洁的设计是为嵌套上下文使用单独的控制器:

resources :users do
  resources :schools, only: [:index], module: :users
end
module Users
  class SchoolsController < ApplicationController
    # GET /users/1/schools
    def index
      user = User.find(params[:user_id])
      render json: user.schools
    end
  end
end

这个控制器只做一个工作。您也可以将其命名为 UserSchoolsController,但将您的控制器拆分到文件夹(和命名空间)中可以更轻松地组织它们。