如何在 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
我的 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