2008-09-27 4 views

Antwort

11

In der Regel sind APIs für meine Anwendungen tatsächlich auf den gleichen Ressourcen wie die HTML-Schnittstelle aufgebaut. Für einige (nicht für mich) könnte das nur der Code sein, der aus dem Scaffold-Generator kommt - aber unabhängig davon, ob ich ihn benutzerdefiniert schreibe oder den Generator behandeln lasse, gibt es nur sehr wenige Fälle, in denen ich Ressourcen nur dem Programm zur Verfügung stelle API und nicht zur Endbenutzeransicht.

Versionierung war kein Problem für die Anwendungen, die ich bisher gebaut habe, aber ich kann mir zwei Möglichkeiten vorstellen, es zu implementieren.

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

in Routen. 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 auch ein benutzerdefiniertes Antwortformat Hinzufügen für jede Version betrachten könnten

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 

Erstere würden Sie URLs wie example.com/v1/posts.xml und example.com/v2/ posts.xml; Letzteres würde Ihnen URLs wie example.com/posts.v1 und example.com/posts.v2 geben

+0

Eine andere Option für die Versionierung, wenn die tatsächliche Geschäftslogik anders ist, wäre namespaced Routen zu verwenden. – Kris

Verwandte Themen