Подстановочное сопоставление для Rails API Versioning вызывает бесконечное перенаправление
Я следил за отличным решением, опубликованным здесь относительно версии API с использованием Rails-маршрутизации, но я продолжаю работать в бесконечном перенаправлении.
Вот раздел моего 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
Ответы
Ответ 1
Не знаю, почему ответ Райана Биггса в заданном вопросе больше не работает, но это то, к чему я его изменил, чтобы его решить:
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