¿Cuáles son las mejores prácticas para diseñar una API pública RESTful en Rails?

StackOverflow https://stackoverflow.com/questions/144359

  •  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 ?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top