Quali sono le migliori pratiche per la progettazione di un'API pubblica RESTful su Rails?
-
02-07-2019 - |
Domanda
Rails viene fornito con risorse RESTful pronte per l'uso, ma le usi per l'API pubblica effettiva? In tal caso, come realizzeresti il ??versioning della tua API, ad esempio example.com/api/v2/foo/bar
?
Soluzione
In genere, le API per le mie applicazioni sono effettivamente basate sulle stesse risorse che compongono l'interfaccia HTML. Per alcuni (non per me), potrebbe essere solo l'utilizzo del codice che esce dal generatore di scaffold, ma indipendentemente dal fatto che lo scriva in modo personalizzato o consenta al generatore di gestirlo, ci sono pochissimi casi in cui espongo risorse solo al programmatico API e non alla vista dell'utente finale.
Il controllo delle versioni non è stato un problema per le applicazioni che ho creato finora, ma posso pensare a due modi per implementarlo.
1) È possibile aggiungere route con il prefisso 'v1', '' v2 '', ecc., che imposta un parametro a cui è possibile accedere nel controller per specificare l'elaborazione da eseguire:
in route.rb:
map.resources :posts, :path_prefix => '/:version'
in 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) Potresti anche considerare di aggiungere un formato di risposta personalizzato per ogni versione
in inizializzatori / mime_types.rb
Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2
in posts_controller.rb
class PostsController < ApplicationController
def index
respond_to do |format|
format.v1 do
# ...
end
format.v2 do
# ...
end
end
end
end
Il primo ti darebbe URL come example.com/v1/posts.xml ed example.com/v2/posts.xml; quest'ultimo ti darebbe URL come example.com/posts.v1 ed example.com/posts.v2