我在使用命名空间时对rails中的路由有疑问。 示例代码:
namespace :api do
# /api/... Api::
namespace :v1 do
devise_for :users, :controllers => {sessions: 'api/v1/users/sessions', :registrations => "api/v1/users/registrations", :password => 'api/v1/users/passwords'}
resources :events do
namespace :informations do
resources :agendas
resources :attendees
resources :polls
resources :presentatios
resources :speakers
resources :sponsors
resources :votes
resources :vote_options
end
end
end
end
我在控制台中使用grep议程检查我的网址,结果是:
/api/v1/events/:event_id/informations/agendas
如何在不从路由中删除命名空间的情况下从URL中删除命名空间信息?
答案 0 :(得分:0)
您可以使用module选项将名称空间(如模块包装中)添加到控制器:
resources :events, module: 'v1/api'
Prefix Verb URI Pattern Controller#Action
events GET /events(.:format) v1/api/events#index
POST /events(.:format) v1/api/events#create
new_event GET /events/new(.:format) v1/api/events#new
edit_event GET /events/:id/edit(.:format) v1/api/events#edit
event GET /events/:id(.:format) v1/api/events#show
PATCH /events/:id(.:format) v1/api/events#update
PUT /events/:id(.:format) v1/api/events#update
DELETE /events/:id(.:format) v1/api/events#destroy
但使用没有版本化网址的版本化API控制器是没有意义的!除非您相信使用自定义请求标头或自定义接受类型,否则这是没有意义的。两者都有一些死硬的REST纯粹追随者,但由于他们太难以测试而现在很少。
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html