使用Active Model Serializer的命名空间API

时间:2016-09-16 18:15:35

标签: ruby-on-rails ruby ruby-on-rails-5

我需要为基于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.rbmodule V1呈现资源的所有信息。

因此,Rails没有调用render json: @list

中的序列化程序

编辑:命名空间有效!

2 个答案:

答案 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_nameread_attribute_for_serialization),如果是一个集合(只是serializer:而不是each_serializer: ,如果是一个SINGLE对象

当然,对于每个模块名称,控制器必须“子文件化”,如建议@Júlio Campos