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: query
或 in: 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:
无法了解如何在数组参数中使用具有枚举值的字符串类型引用。 我可以在项目键中进行引用并且它正在工作,但是 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: query
或in: 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: