使用活动模型序列化程序命名空间 API
Namespacing API with Active Model Serializer
我需要为基于 Rails 的应用程序命名空间 API。
我使用 Active Model Serializer
但现在我需要对 API.
进行版本控制
如何?
我还有子域限制。对于API,我希望...
api.domain.com/v1/users/
与(例如):id
和 :name
对于 User
api.domain.com/v2/users/
与(例如):id
:name
:ranking
for User
那么,我应该如何创建不同的 Serializer
,每个命名空间一个?
并且...我必须在不同的控制器或不同的文件中创建不同的 Serializer
吗?具体如何?
感谢大家。
更新
部分代码:
routes.rb
constraints subdomain: 'api', default: {format: 'json'} do #api.domain.com
#API V1
namespace :v1 do
#resources for v1
end
#API V1
namespace :v2 do
#resources for v2
end
我在 controllers/v1/resource_controller.rb
中使用 module V1
和 render json: @list
呈现资源的 ALL 信息。
所以,Rails 没有调用我放在 serializers/v1/resource_serializer.rb
中的序列化程序
编辑: 命名空间有效!
您需要创建 2 个控制器、2 个序列化程序并定义您的路由。
namespace :api do
namespace :v1 do
resources :foo
end
namespace :v2 do
resources :foo
end
end
还有你的控制器:
class Api::V1::FooController < ApplicationController
#...
end
和
class Api::V2::FooController < ApplicationController
#...
end
您的序列化程序还需要在名称中包含 /v1 和 /v2。
按照建议 @Mirza Memic 最好在调用时也指定序列化器 render json:
和each_serializer: TopModule::SubModule::CustomSerializer
否则我们可能会得到错误(model_name
或 read_attribute_for_serialization
)如果是一个集合(简单地 serializer:
而不是 each_serializer:
ONLY 如果是一个单个对象)
当然控制器必须是每个模块名称的"sub-foldered",建议@Júlio Campos。
我需要为基于 Rails 的应用程序命名空间 API。
我使用 Active Model Serializer
但现在我需要对 API.
如何?
我还有子域限制。对于API,我希望...
api.domain.com/v1/users/
与(例如):id
和 :name
对于 User
api.domain.com/v2/users/
与(例如):id
:name
:ranking
for User
那么,我应该如何创建不同的 Serializer
,每个命名空间一个?
并且...我必须在不同的控制器或不同的文件中创建不同的 Serializer
吗?具体如何?
感谢大家。
更新
部分代码:
routes.rb
constraints subdomain: 'api', default: {format: 'json'} do #api.domain.com
#API V1
namespace :v1 do
#resources for v1
end
#API V1
namespace :v2 do
#resources for v2
end
我在 controllers/v1/resource_controller.rb
中使用 module V1
和 render json: @list
呈现资源的 ALL 信息。
所以,Rails 没有调用我放在 serializers/v1/resource_serializer.rb
编辑: 命名空间有效!
您需要创建 2 个控制器、2 个序列化程序并定义您的路由。
namespace :api do
namespace :v1 do
resources :foo
end
namespace :v2 do
resources :foo
end
end
还有你的控制器:
class Api::V1::FooController < ApplicationController
#...
end
和
class Api::V2::FooController < ApplicationController
#...
end
您的序列化程序还需要在名称中包含 /v1 和 /v2。
按照建议 @Mirza Memic 最好在调用时也指定序列化器 render json:
和each_serializer: TopModule::SubModule::CustomSerializer
否则我们可能会得到错误(model_name
或 read_attribute_for_serialization
)如果是一个集合(简单地 serializer:
而不是 each_serializer:
ONLY 如果是一个单个对象)
当然控制器必须是每个模块名称的"sub-foldered",建议@Júlio Campos。