Как использовать пространство имен + ресурс + коллекция по сравнению с использованием совпадения.Rails routes: namespace + resource + collection vs match
Например, я хочу обрабатывать все HTTP-методы для некоторой конечной точки.
namespace :webhooks do
resources :some_service, only: :none do
collection do
get :some_action
post :some_action
put :some_action
patch :some_action
delete :some_action
end
end
end
# Compare to
match '/webhooks/some_service/some_action', to: 'webhooks/some_service#some_action', via: :all
Вот связанные маршруты в соответствии с rake routes
:
Prefix Verb URI Pattern Controller#Action
some_action_webhooks_some_service_index GET /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
POST /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
PUT /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
PATCH /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
DELETE /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
webhooks_some_service_some_action /webhooks/some_service/some_action(.:format) webhooks/some_service#some_action
Кроме подсчета линии, есть причины, почему я должен предпочесть одну сторону по сравнению с другими?
[ответы на этот вопрос] (http://stackoverflow.com/questions/2441962/what-is-restful-routing) показывают, что спокойная маршрутизация представляет собой комбинацию методов HTTP + URL для достижения разных результатов. Если это так, я думаю, что оба приведенных выше примера успокаиваются. Но предположим, что есть ресурс в конечной точке, например. 'match '/ api/library/book', to: 'api/library # book', через:: all', который позволяет вам делать такие вещи, как создание книги, обновление книги и удаление книги (если вы используете соответствующий HTTP-метод, иначе вы получите ответ 405). Является ли метод «ресурсов» лучше использовать сейчас? – Dennis
В этом случае я не вижу ничего плохого в обоих направлениях. Немного громоздко использовать ressources dsl для не-restfull маршрутов, потому что для этого точно подходит матч, однако 'match' - это простой строительный блок, и нет ничего плохого в использовании его для restfull-маршрутов, если вы можете определить их более элегантно. Но кто-то может также утверждать, что использование ressource dsl в этом случае более явственно и, следовательно, является самодокументированным кодом, указывающим, что у вас есть resfull ressouce –
Хорошая точка. Я думаю, что ресурсы DSL определенно более ясны и делают ваши намерения ясными, по сравнению с однострочным совпадением. И если вы не поддерживаете определенные HTTP-методы, вы можете сказать это с помощью встроенного комментария рядом с этим глаголом (например, # 405), когда вы используете ресурсы DSL. – Dennis