Quais são as melhores práticas para a concepção de uma API pública RESTful on Rails?
-
02-07-2019 - |
Pergunta
Rails vem com recursos RESTful fora da caixa, mas você usa aqueles para sua API pública real? Se sim, como você iria realizar o controle de versão de sua API ou seja example.com/api/v2/foo/bar
?
Solução
Normalmente, APIs para minhas aplicações estão realmente construído sobre os mesmos recursos que compõem a interface HTML. Para alguns (não eu), que pode ser apenas usando o código que sai do andaime gerador, mas independentemente de eu escrevê-lo personalizado ou deixe a alça gerador que, há muito poucos casos em que eu expõem recursos apenas ao programático API e não o ponto de vista do usuário final.
versão não tem sido um problema para as aplicações que eu construí até agora, mas eu posso pensar de duas maneiras de implementá-lo.
1) Você pode adicionar rotas com o 'v1' 'v2 prefixo', etc., que definir um parâmetro que você pode, então, o acesso no controlador para especificar o processamento para ocorrer:
em routes.rb:
map.resources :posts, :path_prefix => '/:version'
em posts_controller.rb
class PostsController < ApplicationController
def index
respond_to do |format|
format.xml do
if params[:version] == 'v1'
# ...
else
# ...
end
end
end
end
end
2) Você também pode considerar a adição de um formato de resposta personalizada para cada versão
em initializers / mime_types.rb
Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2
em posts_controller.rb
class PostsController < ApplicationController
def index
respond_to do |format|
format.v1 do
# ...
end
format.v2 do
# ...
end
end
end
end
O ex-lhe daria URLs como example.com/v1/posts.xml e example.com/v2/posts.xml; este último lhe daria URLs como example.com/posts.v1 e example.com/posts.v2