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

How to dynamically change formatter in grape API?

我的 API 有时 return 数据应为 CSV 格式。 但根据数据 returned,CSV 格式化程序的行为不同(作为分层数据,应根据数据按照特定规则展平) 所以我写了很多海关 CSV 格式化程序。 但我发现我无法动态更改格式化程序:

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

我试过了:

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

但是它失败了,因为 formatter 不是这个上下文中定义的方法。

我试过了:

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 方法使用自定义格式化程序输出葡萄实体。

使用嵌套资源,使其工作:

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