Swagger 2:在数组类型的查询参数中使用枚举引用

Swagger 2: use enum reference in query parameter of array type

无法了解如何在数组参数中使用具有枚举值的字符串类型引用。 我可以在项目键中进行引用并且它正在工作,但是 Swagger 产生错误:不是有效的参数定义

Web UI 生成界面,但它有文本区域而不是我期望的多选框。

正确的做法是什么?

我的代码:

    swagger: '2.0':
    paths:
      /test:
        get:
          parameters:
          - in: origin
            name: status
            description: Origin
            required: false
            schema:
              type: array
              items:
                $ref: '#/definitions/Origin'
            collectionFormat: pipes'
    definitions:
      Origin:
        type: string
        description: Campaign origin
        enum:
          - one
          - two
    externalDocs:
      description: Find out more about Swagger
      url: http://swagger.io
    host: virtserver.swaggerhub.com
    basePath: /

items 包含 $ref 的数组参数在下一个版本 3.0 中是 not supported in OpenAPI/Swagger 2.0. But it looks like this will be possible。目前有几个解决方法,请参见下文。

您的规范还有一些其他问题:

  • in: origin 无效。 in 关键字指定参数位置(路径、查询、header 等),并且根据 OpenAPI/Swagger 规范只接受某些值。我猜你的意思是 in: queryin: header.

  • 拼写错误(或 copy-paste 错误?):swagger: '2.0': 末尾有一个额外的 : 并且 collectionFormat: pipes' 有一个额外的 ' 最后。


使数组参数包含枚举值的一种解决方案是定义内联枚举:

      parameters:
        - in: query
          name: status
          description: Origin
          required: false
          type: array
          collectionFormat: pipes
          items:
            type: string
            enum:
              - one
              - two

另一种解决方案(已找到 here)是使用 YAML 锚点来引用枚举。这是 YAML 的一项功能,您可以在其中使用 &anchor-name 标记键,然后进一步使用 *anchor-name 来引用该键的值。

definitions:
  Origin:
    type: string
    description: Campaign origin
    enum: &origin
      - one
      - two

paths:
  /test:
    get:
      parameters:
        - in: query
          name: status
          description: Origin
          required: false
          type: array
          collectionFormat: pipes
          items:
            type: string
            enum: *origin

一个选项是定义一个参数并对其进行引用:(我在查询定义中使用引用 ($ref:) 时遇到问题)

paths:
  /path:
    get:
      operationId: controllers.controller
      parameters:
        **- $ref: '#/parameters/SPEC'**


parameters:
  SPEC: