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

时间:2017-01-13 16:48:06

标签: swagger swagger-ui swagger-2.0

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

Web UI生成界面,但它有textarea而不是我预期的多选框。

这样做的正确方法是什么?

我的代码:

    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: /

2 个答案:

答案 0 :(得分:1)

包含items的{​​{1}}的数组参数在OpenAPI / Swagger 2.0中为not supported。但它在下一个版本3.0中看起来像this will be possible。目前有几种解决方法,见下文。

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

  • $ref无效。 in关键字指定参数位置(路径,查询,标题等),并且仅根据OpenAPI / Swagger规范接受某些值。我猜您的意思是in: originin: query

  • 错别字(或复制粘贴错误?):in: header在结尾处有一个额外的swagger: '2.0'::在结尾处有一个额外的collectionFormat: pipes'


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

'

另一个解决方案(找到here)是使用YAML锚来引用枚举。这是YAML的一项功能,您可以使用 parameters: - in: query name: status description: Origin required: false type: array collectionFormat: pipes items: type: string enum: - one - two 标记密钥,然后再使用&anchor-name来引用该密钥的值。

*anchor-name

答案 1 :(得分:0)

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

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


parameters:
  SPEC: