Quelles sont les meilleures pratiques pour la conception d'une API publique RESTful sur Rails?

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

  •  02-07-2019
  •  | 
  •  

Question

Rails est livré avec des ressources RESTful prêtes à l'emploi, mais les utilisez-vous pour votre API publique réelle? Si tel est le cas, comment procéderiez-vous à la gestion des versions de votre API, par exemple exemple.com/api/v2/foo/bar ?

Était-ce utile?

La solution

En règle générale, les API de mes applications reposent bien sur les mêmes ressources que l’interface HTML. Pour certains (pas moi), cela peut être juste en utilisant le code qui sort du générateur d'échafaudage - mais que je l'écrive ou le laisse personnalisé, il y a très peu de cas où j'expose des ressources uniquement à la programmation API et non à la vue de l'utilisateur final.

La gestion des versions n'a pas posé de problème pour les applications que j'ai construites jusqu'à présent, mais je peux penser à deux façons de l'implémenter.

1) Vous pouvez ajouter des routes avec le préfixe 'v1,' 'v2,' etc. définissant un paramètre auquel vous pouvez accéder dans le contrôleur pour spécifier le traitement à appliquer:

dans routes.rb:

map.resources :posts, :path_prefix => '/:version'

dans 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) Vous pouvez également envisager d’ajouter un format de réponse personnalisé pour chaque version

dans initializers / mime_types.rb

Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2

dans posts_controller.rb

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.v1 do
        # ...
      end
      format.v2 do
        # ...
      end
    end
  end
end

Le premier vous donnerait des URL comme example.com/v1/posts.xml et example.com/v2/posts.xml; ce dernier vous donnerait des URL comme example.com/posts.v1 et example.com/posts.v2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top