ruby on rails - tutorial - ¿Cuáles son las mejores prácticas para diseñar una API pública RESTful en Rails?
rails api tutorial (1)
Rails viene con recursos RESTful listos para usar, ¿pero los usa para su API pública real? Si es así, ¿cómo lograrías el control de versiones de tu API, es decir, example.com/api/v2/foo/bar
?
Normalmente, las API para mis aplicaciones se basan en los mismos recursos que componen la interfaz HTML. Para algunos (no para mí), eso podría ser simplemente usar el código que sale del generador de andamios, pero independientemente de si lo escribo de manera personalizada o de que el generador lo maneje, hay muy pocos casos en los que expongo los recursos solo a la programática API y no a la vista del usuario final.
El control de versiones no ha sido un problema para las aplicaciones que he desarrollado hasta ahora, pero puedo pensar en dos formas de implementarlo.
1) Puede agregar rutas con el prefijo ''v1,'' ''v2,'' etc., que establecen un parámetro al que puede acceder en el controlador para especificar que se produzca el procesamiento:
en routes.rb:
map.resources :posts, :path_prefix => ''/:version''
en 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) También podría considerar agregar un formato de respuesta personalizado para cada versión
en initializers / mime_types.rb
Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2
en posts_controller.rb
class PostsController < ApplicationController
def index
respond_to do |format|
format.v1 do
# ...
end
format.v2 do
# ...
end
end
end
end
El primero le daría URLs como example.com/v1/posts.xml y example.com/v2/posts.xml; el último le daría URLs como example.com/posts.v1 y example.com/posts.v2