版本控制葡萄 active_model_serializer
Versioning Grape active_model_serializer
我正在尝试使用 grape 和 grape_active_model_serializer 为我的 rails 应用制作 V2 api。但是我不知道如何为我的 api.
的每个版本制作序列化程序
这是我的 api 的样子
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/serializers/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
我添加到我的 config/application.rb
config.autoload_paths += Dir[Rails.root.join('app', 'serializers', '**/')]
目前,V1 和 V2 用户控制器返回相同的 json,但没有 phone 编号和地址,我如何告诉我的 v2 api 使用 v2 序列化器?
我正在使用 grape,grape-active_model_serializers,grape-swagger 和 grape-swagger-rails
实际上这很简单,在我尝试了巫术和萨满教之后 rails 给我提示,如果你把你的序列化器分成一些工作正常的模块,那么现在我有
module V1
class UserSerializer < ActiveModel::Serializer
include Serializer
attributes :email,
:username,
:first_name,
:last_name
和
module V2
class UserSerializer < ActiveModel::Serializer
include Serializer
attributes :email,
:username,
:first_name,
:last_name,
:phone_number,
:adress
我给出答案是因为我看到很多关于序列化程序版本的问题,抱歉英语不好,但我没有土豆 -)
我正在尝试使用 grape 和 grape_active_model_serializer 为我的 rails 应用制作 V2 api。但是我不知道如何为我的 api.
的每个版本制作序列化程序这是我的 api 的样子
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/serializers/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
我添加到我的 config/application.rb
config.autoload_paths += Dir[Rails.root.join('app', 'serializers', '**/')]
目前,V1 和 V2 用户控制器返回相同的 json,但没有 phone 编号和地址,我如何告诉我的 v2 api 使用 v2 序列化器?
我正在使用 grape,grape-active_model_serializers,grape-swagger 和 grape-swagger-rails
实际上这很简单,在我尝试了巫术和萨满教之后 rails 给我提示,如果你把你的序列化器分成一些工作正常的模块,那么现在我有
module V1
class UserSerializer < ActiveModel::Serializer
include Serializer
attributes :email,
:username,
:first_name,
:last_name
和
module V2
class UserSerializer < ActiveModel::Serializer
include Serializer
attributes :email,
:username,
:first_name,
:last_name,
:phone_number,
:adress
我给出答案是因为我看到很多关于序列化程序版本的问题,抱歉英语不好,但我没有土豆 -)