我需要为基于Rails的应用程序命名空间API。
我使用completionBlock
但现在我需要对我的API进行版本控制。
如何?
我还有子域约束。对于API,我希望...
Active Model Serializer
使用(例如)api.domain.com/v1/users/
和:id
:name
User
({例})api.domain.com/v2/users/
:id
:name
:ranking
那么,我应该如何创建不同的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
呈现资源的所有信息。
因此,Rails没有调用render json: @list
编辑:命名空间有效!
答案 0 :(得分:1)
您需要创建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。
答案 1 :(得分:0)
根据建议@Mirza Memic最好在调用render json:
each_serializer: TopModule::SubModule::CustomSerializer
否则我们可能会收到错误(model_name
或read_attribute_for_serialization
),如果是一个集合(只是serializer:
而不是each_serializer:
,如果是一个SINGLE对象强>)
当然,对于每个模块名称,控制器必须“子文件化”,如建议@Júlio Campos。