Параметры Swagger в запросе и / или теле
Наш API имеет такие конечные точки, которые поддерживают параметры как из query
и из body
в то же время, объединяя эти два набора параметров.
Например:
/foo?param1=value1
body: {
param2=value2
}
Результирующий набор параметров будет содержать два, param1
а также param2
,
Эту конечную точку можно использовать как:
/foo?param1=value1¶m2=value2
ИЛИ ЖЕ
/foo
body: {
param1=value1,
param2=value2
}
Есть ли способ, как указать эту "двойственность" в Swagger?
UPD
Я полагаю, я должен определить параметр как: body
а также query
in:
- body
- query
1 ответ
Вам нужно будет определить параметры запроса и параметры тела, но пометить их как необязательные. Используйте операцию description
объяснить, что клиент может отправить параметры либо в строке запроса, либо в теле.
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 v. 3.11.0.