如何在grape API中动态更改格式化程序?

时间:2015-09-29 07:55:38

标签: ruby-on-rails grape-api grape-entity

我的API有时会将数据作为CSV格式返回。 但是根据返回的数据,CSV格式化程序的行为方式不同(作为分层数据,应根据数据遵循特定规则展平) 所以我写了很多关税CSV格式化程序。 但我发现我无法动态更改格式化程序:

我正在使用并希望使用Grape::Entities,API应该能够将数据公开为json,xml和csv。

我试过了:

desc 'My API 1'
get '/' do
  formatter :csv, CustomCsvFormatter
  present my_data, with: MyEntity 
end

但它失败了,因为格式化程序在这种情况下不是一个定义的方法。

我试过了:

desc 'My API 1'
formatter :csv, CustomCsvFormatter
get '/' do
  present my_data, with: MyEntity 
end

desc 'My API 2'
formatter :csv, CustomOtherCsvFormatter
get '/blublu' do
  present my_data, with: MyEntity 
end

但是对于所有方法只有CustomOtherCsvFormatter。最后一个格式化程序替换之前定义的。

有没有办法动态更改格式化程序?

你有没有看到其他方式做我想要的? :根据API方法使用自定义格式化程序输出葡萄实体。

1 个答案:

答案 0 :(得分:0)

使用嵌套资源,让它工作:

resource :bidules do
  desc "My API 1"
  formatter :csv, CustomCsvFormatter
  get '/' do
    present my_data, with: MyEntity
  end

  resource :blublu do
    desc "My API 2"
    formatter :csv, CustomOtherCsvFormatter
    get '/' do
      present my_data, with: MyEntity
    end
  end

end