Должен ли я использовать маршрутизацию ресурсов даже для не-CRUD маршрутов (Rails)? - PullRequest
1 голос
/ 28 мая 2019

Считается ли лучшим использование ресурсоемких маршрутов в Rails, когда это возможно, даже если глаголы CRUD действительно не соответствуют выполняемым действиям (подробности следуют)?

В моем приложении на Rails я внедряю систему входа в систему OAuth с помощью модуля sorcery external. Я внимательно следил за их официальным учебным пособием , в котором определены маршруты для таких методов OAuth, как этот.

# config/routes.rb
post "oauth/callback" => "oauths#callback"
get "oauth/callback" => "oauths#callback" # for use with Github, Facebook
get "oauth/:provider" => "oauths#oauth", :as => :auth_at_provider

Как правило, auth_at_provider вызывается, когда пользователь нажимает кнопку «Войти через [имя поставщика]», а callback вызывается после входа в систему через внешнего поставщика.

Я оставил маршруты как есть, но товарищ по команде, проверяя их, предложил использовать маршрутизацию ресурсов, например, так:

resources :oauth only: [:index, :create, :show]

Полагаю, это технически возможно, но для меня единственные маршруты, определенные в руководстве, гораздо более интуитивны и не требуют пояснений. Итак, мои вопросы:

  • Считается ли лучше (или распространенным) использовать ресурсоемкие маршруты даже в подобных случаях? или
  • Являются ли ресурсные маршруты всего лишь сокращением для маршрутов резака печенья и должны использоваться только для простых контроллеров?

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Я бы не использовал помощников ресурса (ов). Название говорит о том, что оно используется для ресурсов, а логика oauth не является ресурсами.

Вы могли бы немного реорганизовать маршруты, хотя

namespace :oauth do
  match :callback, via: [:get, :post]
  get ":provider", action: :oauth, as: :at_provider
end

Это создает следующие маршруты:

              oauth_callback GET|POST /oauth/callback(.:format)                                                                oauth#callback
           oauth_at_provider GET      /oauth/:provider(.:format)                                                               oauth#oauth

Это в основном те же маршруты, СУХИЕ и без вводящей в заблуждение формулировки "ресурса".

* Обратите внимание на небольшое изменение с "auth_at_provider" на " o auth_at_provider", представленное пространством имен

1 голос
/ 28 мая 2019

Обычно рекомендуется использовать ресурсоемкую маршрутизацию, когда вы фактически выполняете CRUD для ресурса, например:

resources :users # for creating, reading, updating, deleting users

Если вам нужно создать совершенно новый ресурс и контроллер только длянапример, при создании конечной точки, я не вижу никакого вреда в нарушении шаблона и использовании нересурсных маршрутов, но я стараюсь избегать этого.

Вы должны попытаться использовать ресурсоемкую маршрутизацию с именами, которыеимеет смысл, чтобы ваши маршруты соответствовали:

scope path: 'oauth' do
  resource :callback, only: [:show, :update] # use show/update instead of callback method
  resources :providers, only: [:show] # use show instead of auth_at_provider
end

Таким образом, ваши маршруты будут выглядеть так:

POST oauth/callback
GET  oauth/callback
GET  oauth/providers/:id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...