ruby Swagger:在哈希错误中表示枚举属性

8fq7wneg  于 2023-10-18  发布在  Ruby
关注(0)|答案(1)|浏览(99)

我目前正在编写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'
我想用哈希而不是数组来表示枚举。有没有什么变通的办法可以让我做到这一点?

esyap4oy

esyap4oy1#

我终于想出了一个办法。这个解决方案适用于OpenAPI 3 -OpenAPI规范的最新版本,作为回答这个问题的点。

我是这么做的
方案一

components:
  schemas:
    State:
      type: object
      additionalProperties:
        type: string
      example:
        state1: State 1
        state2: State 2
        state3: State 3
        state4: State 4
        state5: State 5

这是将整个散列传递到请求的响应体中,因此会抛出错误

方案二:

另一种方法是将它们表示为数组,这不是我的理想解决方案,但它允许Swagger从数组中只选择一个项传递到请求的响应体中。然而,我会注意到枚举是哈希的,我必须为客户端的枚举做hashescollection_select

components:
  schemas:
    State:
      type: string
      description: List of States
      enum:
        - State 1
        - State 2
        - State 3
        - State 4
        - State 5

最后,无论您选择哪种解决方案,您都可以在其他模型中引用它们,如下所示:

components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
        first_name:
          type: string
        last_name:
          type: string
        password:
          type: string
          format: password
        state:
          $ref: '#/components/schemas/State'

这里有一个链接到Swagger文档:Dictionaries, HashMaps and Associative Arrays
仅此而已

希望这能帮上忙

相关问题