Параметры Swagger в запросе и / или теле

Наш API имеет такие конечные точки, которые поддерживают параметры как из query и из body в то же время, объединяя эти два набора параметров.

Например:

/foo?param1=value1
body: {
    param2=value2
}

Результирующий набор параметров будет содержать два, param1 а также param2,

Эту конечную точку можно использовать как:

/foo?param1=value1&param2=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&param2=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.

Другие вопросы по тегам