Was sind die besten Praktiken ein RESTful öffentlichen API on Rails für die Gestaltung?

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

  •  02-07-2019
  •  | 
  •  

Frage

Rails kommt mit RESTful Ressourcen aus der Box, aber verwenden Sie die für Ihre aktuelle öffentliche API? Wenn ja, wie würden Sie erreichen Versionierung Ihrer API heißt example.com/api/v2/foo/bar?

War es hilfreich?

Lösung

Normalerweise APIs für meine Anwendungen sind in der Tat auf den gleichen Ressourcen aufgebaut, die die HTML-Oberfläche bilden. Für einige (nicht ich), dass könnte nur mit dem Code, der aus dem Gerüst kommt Generator aber unabhängig davon, ob ich es Brauch schreiben oder lassen Sie den Generator damit umgehen, gibt es sehr wenige Fälle, in denen ich Ressourcen nur in dem programmatischen aussetzen API und nicht an den Endverbraucher Ansicht.

Versioning hat ein Problem für die Anwendungen nicht, die ich bisher gebaut habe, aber ich kann auf zwei Arten denken, um es umzusetzen.

1) Sie können Routen hinzufügen mit dem Präfix ‚v1‘, ‚v2‘ usw., die einen Parameter einstellen, die Sie dann Zugriff auf die Steuerung der Verarbeitung angeben, auftreten:

in routes.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) Sie könnten auch erwägen, eine benutzerdefinierte Antwortformat für jede Version Hinzufügen

in initializers / 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

Die ehemalige würden Sie URLs wie example.com/v1/posts.xml und example.com/v2/posts.xml; Letztere würde Ihnen URLs wie example.com/posts.v1 und example.com/posts.v2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top