我遵循这里发布的关于使用Rails路由控制API版本的优秀解决方案,但我一直遇到无限重定向。
这是我的routes.rb
的一部分
namespace :api do
namespace :v1 do
resources :books
end
namespace :v2 do
resources :books
end
match 'v:api/*path', :to => redirect("/api/v2/%{path}")
match '*path', :to => redirect("/api/v2/%{path}")
end
,这实际上与张贴的答案相同。访问/api/v1/books/list.json
和api/v2/books/list.json
一样正常工作。我遇到的问题是/api/books/list.json
,它应该重定向到/api/v1/books/list.json
。如果我试图访问api而没有指定哪个版本,我的浏览器会响应一个无限重定向。我的日志是这样的:
Started GET "/api/books/list.json?max_number=10" for 127.0.0.1 at 2013-04-01 22:00:51 -0400
Started GET "/api/v1/books%2Flist" for 127.0.0.1 at 2013-04-01 22:00:51 -0400
Started GET "/api/v1/books%2Flist" for 127.0.0.1 at 2013-04-01 22:00:51 -0400
Started GET "/api/v1/books%2Flist" for 127.0.0.1 at 2013-04-01 22:00:51 -0400
//... and so on
不知道为什么Ryan Biggs在发布的问题中的回答不再工作了,但这是我为了解决它而改变的:
namespace :api do
namespace :v1 do
resources :books do
collection do
get 'list'
get '/*path', :to => redirect("http://localhost:3000")
end
end
end
namespace :v2 do
resources :books do
collection do
get 'list'
end
end
end
match 'v:api/*path', :to => redirect{|params, req|
"/api/v1/#{params[:path]}.#{params[:format]}#{params[:query_string]}?#{req.query_string}"
}
match '*path', :to => redirect{|params, req|
"/api/v1/#{params[:path]}.#{params[:format]}#{params[:query_string]}?#{req.query_string}"
}
end