3 votes

La correspondance des caractères génériques pour le versionnement de l'API Rails entraîne une redirection infinie.

Je suivais l'excellente solution affichée ici concernant versionner une API à l'aide du routage Rails mais je me heurte toujours à une redirection infinie.

Voici une partie de mon 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

qui est pratiquement la même que la réponse affichée. Accès à /api/v1/books/list.json fonctionne comme prévu, tout comme api/v2/books/list.json . Le problème que je rencontre est le suivant /api/books/list.json qui devrait rediriger vers /api/v1/books/list.json . Si j'essaie d'accéder à l'api sans spécifier la version, mon navigateur répond par une redirection infinie. Mes journaux ressemblent à ceci :

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

2voto

you786 Points 1793

Je ne sais pas pourquoi la réponse de Ryan Biggs dans la question postée ne fonctionne plus, mais c'est ce que j'ai changé pour résoudre le problème :

  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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X