2

J'essaie de faire une application api V2 pour mes rails avec raisin et grape_active_model_serializer. Mais je n'arrive pas à comprendre comment faire un sérialiseur pour chaque version de mon API.Versioning Grape active_model_serializer

Voici ce que mon api ressemble

app/api/api.rb:

require 'grape-swagger' 
class API < Grape::API 
    prefix 'api' 
    format :json 
    formatter :json, Grape::Formatter::ActiveModelSerializers 
    use ::WineBouncer::OAuth2 

    <... some code here ...> 

    mount V1::APIV1 
    add_swagger_documentation api_version: 'v1', 
          hide_documentation_path: false, 
          hide_format: true 
    mount V2::APIV2 
    add_swagger_documentation api_version: 'v2', 
          hide_documentation_path: false, 
          hide_format: true 
end 

app/api/v1/apiv1.rb

module V1 
    class APIV1 < Grape::API 
    version 'v1', using: :path 

    mount V1::UsersController 
    end 
end 

app/api/v2/apiv2.rb

module V2 
    class APIV2 < Grape::API 
    version 'v2', using: :path 

    mount V2::UsersController 
    end 
end 

app/sérialiseurs/v1

class UserSerializer < ActiveModel::Serializer 
    include Serializer 

    attributes :email, 
       :username, 
       :first_name, 
       :last_name 

app/serializers/v2

class UserSerializer < ActiveModel::Serializer 
    include Serializer 

    attributes :email, 
       :username, 
       :first_name, 
       :last_name, 
       :phone_number, 
       :adress 

et j'ajouté à ma config/application.rb

config.autoload_paths += Dir[Rails.root.join('app', 'serializers', '**/')] 

Pour l'instant, le contrôleur des utilisateurs V1 et V2 reviennent le même json sans numéro de téléphone et adresse, comment puis-je dire à mon api v2 d'utiliser le sérialiseur v2?

J'utilise raisin, raisin active_model_serializers, raisin fanfaronnades et raisin Swagger rails

Répondre

0

En fait, il était assez simple, après avoir essayé des rails de sorcellerie et chamanisme me donner l'indice, Si vous divisez votre serializers dans le module qui fonctionne bien quelques-uns maintenant j'ai

module V1 
    class UserSerializer < ActiveModel::Serializer 
    include Serializer 

    attributes :email, 
      :username, 
      :first_name, 
      :last_name 

et

module V2 
    class UserSerializer < ActiveModel::Serializer 
    include Serializer 

    attributes :email, 
      :username, 
      :first_name, 
      :last_name, 
      :phone_number, 
      :adress 

Je mets la réponse parce que j'ai vu beaucoup de versionning sur le questionnant de sérialiseurs désolé pour le mauvais anglais mais je n'ai pas de pommes de terre -)