¿Cuáles son las mejores prácticas para diseñar una API pública RESTful en Rails?
-
02-07-2019 - |
Pregunta
Rails viene con recursos REST completos listos para usar, pero ¿los usas para tu API pública real? Si es así, ¿cómo lograría el control de versiones de su API, es decir, example.com/api/v2/foo/bar
?
Solución
Por lo general, las API para mis aplicaciones se basan en los mismos recursos que conforman 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 a la medida o dejo que el generador lo maneje, hay muy pocas instancias en las que expongo recursos solo a la programación. API y no a la vista del usuario final.
La versión no ha sido un problema para las aplicaciones que he creado hasta ahora, pero puedo pensar en dos formas de implementarlo.
1) Podría agregar rutas con el prefijo 'v1', '' v2 '', que establece un parámetro al que puede acceder en el controlador para especificar el procesamiento:
en route.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 puede considerar agregar un formato de respuesta personalizado para cada versión
en inicializadores / 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 te daría URL como example.com/v1/posts.xml y example.com/v2/posts.xml; Este último le proporcionará direcciones URL como example.com/posts.v1 y example.com/posts.v2