2015-09-29 8 views
5

In .NET konnten wir unsere APIs auf Methodenebene versionieren, indem wir sie annotieren und nur die Methoden vervielfältigten, die zwischen den Versionen unterschiedlich waren. Ich bin mit Rails zu einem Produktteam gewechselt und versuche herauszufinden, ob es etwas gibt, das mir bei Rails hilft. Alles, was ich bis jetzt gesehen habe, schlägt vor, den gesamten Controller in einem Modul mit V1, V2, etc ... zu namespace. Wenn wir sagen, nur 1 Methode ist unterschiedlich zwischen V1 und V2, bietet die Möglichkeit, die Menge von Duplizierung notwendig.API-Versionierung von Rails auf Methodenebene

Danke.

Antwort

3

Ruby ist eine extrem flexible und umfangreiche Sprache und es sollte nicht schwer sein, Code-Duplikation zu vermeiden.

Eine, schmutzig und einfach, Möglichkeit, Ihr Problem zu verwalten, ist durch Routing zu geeigneten Aktionen. In .NET routen Sie Anfragen tatsächlich durch eine Annotationsmethode und ohne spezielle Sprachfunktionen.

# API::V2 implements only special_method 
get '/api/v2/special_method', controller: 'API::V2', action: 'special_method' 

# all other actions from V2 are processed by V1 
mount API::V1 => '/api/v1' 
mount API::V1 => '/api/v2' 

Eine weitere, erweiterte Möglichkeit besteht darin, Module zur Implementierung von Controller-Aktionen (Instanzmethoden) zu verwenden. Dann können Sie dasselbe Modul in V2 Ihrer API wiederverwenden und diese Methode überschreiben, die geändert werden muss.

class API::V1 
    # implementaton of API::V1 
    include ImplV1 
end 

class API::V2 
    # all the methods from V1 are available in V2 too 
    include ImplV1 

    # override methods from V1 here 
    include ImplV2 
end 

schließlich eine viel einfacher, aber weniger flexibel, Art und Weise ist, um direkt V2 von V1 zu erben:

class API::V2 < API::V1 
    def special_method 
    # ... 
    end 
end 
+0

Danke so sehr diese genial. – fogwolf