我目前正在编写Ruby on Rails API的Swagger文档。API有许多枚举器(enum),它们包含在各种模型中。枚举存储为app/models/concerns
目录中的哈希而不是数组,以便以后可以修改它们而不会出现问题。
状态枚举(state.rb)
module State
extend ActiveSupport::Concern
included do
enum state: { state1: 'State 1',
state2: 'State 2',
state3: 'State 3',
state4: 'State 4',
state5: 'State 5' }
end
end
然而,当我试图在Swagger中的组件模式中表示它时,如下所示:
components:
schemas:
State:
type: object
properties:
enum: { state1: 'State 1',
state2: 'State 2',
state3: 'State 3',
state4: 'State 4',
state5: 'State 5' }
我得到一个错误:
不应具有其他属性
状态1:'状态1'
状态2:'状态2'
状态3:'状态3'
状态4:'状态4'
状态5:'状态5'
我想用哈希而不是数组来表示枚举。有没有什么变通的办法可以让我做到这一点?
1条答案
按热度按时间esyap4oy1#
我终于想出了一个办法。这个解决方案适用于OpenAPI 3 -OpenAPI规范的最新版本,作为回答这个问题的点。
我是这么做的:
方案一
这是将整个散列传递到请求的响应体中,因此会抛出错误
方案二:
另一种方法是将它们表示为数组,这不是我的理想解决方案,但它允许Swagger从数组中只选择一个项传递到请求的响应体中。然而,我会注意到枚举是哈希的,我必须为客户端的枚举做
hashes
的collection_select
。最后,无论您选择哪种解决方案,您都可以在其他模型中引用它们,如下所示:
这里有一个链接到Swagger文档:Dictionaries, HashMaps and Associative Arrays
仅此而已
希望这能帮上忙