2008-09-27 15 views

Respuesta

11

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 versionado no ha sido un problema para las aplicaciones que he desarrollado hasta ahora, pero puedo pensar en dos formas de implementarlo.

1) Se podría añadir rutas con el prefijo 'v1' 'V2', etc., que establece un parámetro que puede entonces tener acceso en el controlador para especificar el procesamiento que se produzca:

en rutas. 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 la adición de un formato de respuesta personalizada 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 sería darle 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

+0

Otra opción para versionar si la lógica de negocios real es diferente sería usar rutas con espacios de nombres. – Kris

Cuestiones relacionadas