Rails viene con recursos RESTful fuera de la caja, pero ¿los usa para su API pública real? De ser así, ¿cómo lograrías el control de versiones de tu API, es decir, example.com/api/v2/foo/bar
?¿Cuáles son las mejores prácticas para diseñar una API pública RESTful en Rails?
Respuesta
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
- 1. ¿Cuáles son las mejores prácticas para diseñar esquemas XML?
- 2. ¿Cuáles son las mejores prácticas para agregar metadatos a una respuesta RESTful JSON?
- 3. Mejores prácticas y pautas para diseñar una API
- 4. Índices MySQL: ¿cuáles son las mejores prácticas?
- 5. ¿Cuáles son las mejores prácticas para usar Z2 Availability Zones?
- 6. ¿Cuáles son las mejores prácticas para repositorios de horno?
- 7. nhibernate: ¿cuáles son las mejores prácticas para implementar la igualdad?
- 8. ¿Cuáles son las mejores prácticas para la página raíz de una API REST?
- 9. ¿Cuáles son las mejores prácticas para registrar un error?
- 10. Mejores prácticas para diseñar atajos de teclado
- 11. ¿Cuáles son las mejores prácticas en la interoperabilidad del lenguaje?
- 12. Mejores prácticas para diseñar GUI en GWT
- 13. MVC3 y EF Data first: ¿cuáles son las mejores prácticas?
- 14. ¿Cuáles son las mejores prácticas para enviar respuestas de error en servicios web JSON?
- 15. ¿Cuáles son las mejores prácticas al usar SWIG con C#?
- 16. ¿Cómo diseñar una API pública en ASP.Net?
- 17. CSS3 - ¿Cuáles son las mejores prácticas de rendimiento?
- 18. ¿Cuáles son las mejores prácticas para implementar el operador == para una clase en C#?
- 19. ¿Mejores prácticas para API seguras?
- 20. ¿Cuáles son sus mejores prácticas para los proyectos de backbone.js?
- 21. ¿Qué son las mejores prácticas de MEF?
- 22. ¿Cuáles son las mejores prácticas para diseñar clases de JavaScript que representan objetos de interfaz de usuario en el DOM?
- 23. ¿Cuáles son las mejores prácticas para rastrear advertencias/errores en procesos de larga ejecución?
- 24. ¿Cuáles son las mejores prácticas de Python para las constantes de clave dict del diccionario?
- 25. ¿Cuáles son las mejores prácticas para crear una aplicación de chat en android
- 26. ¿Cuáles son las mejores prácticas para la lectura y escritura de datos intensivos en una HD?
- 27. ¿Cuáles son las mejores prácticas para iniciar sesión en una aplicación empresarial?
- 28. ¿Cuáles son las mejores prácticas para implementar una aplicación Catalyst en un servidor de producción?
- 29. ¿Cuáles son las mejores prácticas para el manejo de errores al escribir una API para el iphone?
- 30. ¿Cuáles son las mejores prácticas para internacionalizar una aplicación de escritorio Java Swing?
Otra opción para versionar si la lógica de negocios real es diferente sería usar rutas con espacios de nombres. – Kris