查询 and/or 正文中的 Swagger 参数
Swagger parameters in query and/or body
我们的 API 有这样的端点,通过合并这两组参数,同时支持来自 query
和 body
的参数。
例如:
/foo?param1=value1
body: {
param2=value2
}
生成的参数集将包含两个,param1
和 param2
。
此端点可用作:
/foo?param1=value1¶m2=value2
或
/foo
body: {
param1=value1,
param2=value2
}
有没有办法在 Swagger 中指定这个 'duality'?
UPD
我想我应该将参数定义为:body
和 query
in:
- body
- query
您需要同时定义查询参数和正文参数,但将它们全部标记为可选。使用操作description
说明客户端可以在query string或body中发送参数。
swagger: '2.0'
...
paths:
/foo:
post:
consumes:
- application/json
parameters:
- in: query
name: param1
type: string
required: false
- in: query
name: param2
type: string
required: false
- in: body
name: body
required: false
schema:
type: object
properties:
param1:
type: string
param2:
type: string
使用 OpenAPI 3.0,它更优雅一些,因为您可以为查询字符串和请求正文重用相同的 schema
:
openapi: 3.0.0
...
paths:
/foo:
post:
parameters:
# This expands into ?param1=value1¶m2=value2&...
- in: query
name: parameters
required: false
schema:
$ref: '#/components/schemas/Parameters'
style: form
explode: true
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/Parameters'
responses:
'200':
description: OK
components:
schemas:
Parameters:
type: object
properties:
param1:
type: string
param2:
type: string
Swagger UI 用户注意事项:从 UI v. 3.11.0.
开始,似乎还不支持将对象序列化为查询字符串
我们的 API 有这样的端点,通过合并这两组参数,同时支持来自 query
和 body
的参数。
例如:
/foo?param1=value1
body: {
param2=value2
}
生成的参数集将包含两个,param1
和 param2
。
此端点可用作:
/foo?param1=value1¶m2=value2
或
/foo
body: {
param1=value1,
param2=value2
}
有没有办法在 Swagger 中指定这个 'duality'?
UPD
我想我应该将参数定义为:body
和 query
in:
- body
- query
您需要同时定义查询参数和正文参数,但将它们全部标记为可选。使用操作description
说明客户端可以在query string或body中发送参数。
swagger: '2.0'
...
paths:
/foo:
post:
consumes:
- application/json
parameters:
- in: query
name: param1
type: string
required: false
- in: query
name: param2
type: string
required: false
- in: body
name: body
required: false
schema:
type: object
properties:
param1:
type: string
param2:
type: string
使用 OpenAPI 3.0,它更优雅一些,因为您可以为查询字符串和请求正文重用相同的 schema
:
openapi: 3.0.0
...
paths:
/foo:
post:
parameters:
# This expands into ?param1=value1¶m2=value2&...
- in: query
name: parameters
required: false
schema:
$ref: '#/components/schemas/Parameters'
style: form
explode: true
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/Parameters'
responses:
'200':
description: OK
components:
schemas:
Parameters:
type: object
properties:
param1:
type: string
param2:
type: string
Swagger UI 用户注意事项:从 UI v. 3.11.0.
开始,似乎还不支持将对象序列化为查询字符串