如何构建Rest API的路由

时间:2016-03-13 23:31:13

标签: ruby-on-rails ruby rest routes

我对如何构建路线感到困惑。我的应用程序处理时间表并包含三个模型:

Employer
Employer id
Name and password

Employee
id
Employer id (FK)
Name and password

Timesheet
Employee id (FK)
Employer id(FK)
Timestamp

我想根据员工ID选择员工的时间表,并能够使用雇主ID为所有雇员选择工作时间表。在这两种情况下,我还希望能够将我选择的时间表限制为特定的一周。

这是我到目前为止所做的:

scope '/api' do
scope '/v1' do
  scope '/employees' do
    get '/' => 'api_employees#index'
    post '/' => 'api_employees#create'
      scope '/:id' do
        get '/' => 'api_employees#show'
        put '/' => 'api_employees#update'
          scope '/timesheets' do
            get '/' => 'api_timesheets#index'
            post '/' => 'api_timesheets#create'
              scope '/:date' do
                get '/' => 'api_timesheets#show'
                put '/' => 'api_timesheets#update'
              end
          end
      end
   end
end
end

我很困惑我是否应该创建一个名为“雇主”的全新范围​​,其中包含员工和时间表,或者我是否应将现有范围放在雇主范围内以避免重复。

1 个答案:

答案 0 :(得分:1)

当我设计路线时,我想到了一个文件系统。例如,在您的情况下,时间表是文件,其ID是文件名。时间表保存在文件夹timesheets中。如果您是linux / unix用户,请将根路径视为/usr/share,其中资源只能由任何人阅读。

当我想搜索某些时间表时,我将搜索条件添加到查询字符串中,就像在文件系统中按CTRL + F一样。

当我想限制对某些时间表的访问时,我将它们放在用户home directory中,其名称为/employers/:employer_id/employees/:employee_id(:xxx_id如果您可以通过登录识别它们,则可以省略部分。

所以路线看起来像

scope 'api' do
scope 'v1' do

  resources :timesheets, only: [:index, :show]

  resources :employees, only: [:show, :update] do
    resources :timesheets, only: [:index, :create]
  end

  resources :employers, only: [:show, :update] do
    resources :timesheets, only: [:index]
  end

end
end

"按日期搜索"可以在任何index行动中实施。