Quali sono le migliori pratiche per la progettazione di un'API pubblica RESTful su Rails?

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

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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top