2015-09-29 13 views
5

In .NET siamo stati in grado di eseguire la versione delle nostre API a livello del metodo annotandole e duplicando solo i metodi che erano diversi tra le versioni. Sono passato a un team di prodotto utilizzando Rails e sto cercando di capire se c'è qualcosa che possa aiutarmi a farlo in Rails. Tutto ciò che ho visto finora suggerisce lo spazio dei nomi dell'intero controller in un modulo con V1, V2, ecc ... quando diciamo che solo 1 metodo è diverso tra V1 e V2, fornendo il potenziale per ridurre notevolmente la quantità di duplicazione necessaria.Versionings API Rails al livello del metodo

Grazie.

risposta

3

Ruby è un linguaggio estremamente flessibile e ricco e non dovrebbe essere difficile evitare la duplicazione del codice.

Uno, sporco e semplice, il modo per gestire il tuo problema è il routing verso azioni appropriate. In .NET in realtà instradi le richieste annotando il metodo e non utilizzando alcuna caratteristica linguistica speciale.

# 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' 

altro, più avanzata, modo è quello di utilizzare moduli per attuare azioni di controllo (metodi istanza). Quindi puoi riutilizzare lo stesso modulo in V2 dell'API e sovrascrivere quel metodo, che richiede di essere modificato.

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 

Infine, una molto più semplice, ma meno flessibile, modo è quello di ereditare direttamente V2 da V1:

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

Grazie tanto questo è impressionante. – fogwolf

Problemi correlati