Как определить параметры с квадратными скобками в OpenAPI (Swagger)?

#swagger #openapi

#развязность #openapi

Вопрос:

У меня есть конечная точка с параметрами запроса, которые используют квадратные скобки:

 GET /info?sort[name]=1amp;sort[age]=-1
 

Здесь name и age приведены имена полей из моего определения модели.

Как я могу написать определение OpenAPI (Swagger) для этих параметров?

Ответ №1:

Это зависит от того, какую версию OpenAPI (Swagger) вы используете.

OpenAPI 3.x

sort Параметр может быть определен как объект со свойствами name и. age Метод сериализации параметров должен быть style: deepObject и explode: true .

 openapi: 3.0.0
...

paths:
  /info:
    get:
      parameters:
        - in: query
          name: sort
          schema:
            type: object
            properties:
              name:
                type: integer
                example: 1
              age:
                type: integer
                example: -1
          style: deepObject
          explode: true
      responses:
        '200':
          description: OK
 

Это поддерживается в Swagger UI 3.15.0 и Swagger-Editor 3.5.6 .

Важно: deepObject стиль сериализации поддерживает только простые не вложенные объекты с примитивными свойствами, такими как в примере выше. Поведение для вложенных объектов и массивов объектов не определено.

Другими словами, пока мы можем определить

 ?param[foo]=...amp;param[bar]=...
 

в настоящее время нет способа определить дополнительные вложенные параметры запроса, такие как

 ?param[0][foo]=...amp;param[1][bar]=...
or
?param[foo][0][smth]=...amp;?param[foo][1][smth]=
 

Если вам нужен синтаксис для глубоко вложенных параметров запроса, проголосуйте и выполните этот запрос функции:
Поддержка глубоких объектов для параметров запроса со стилем deepObject

OpenAPI 2.0 (Swagger 2.0)

sort[name] и sort[age] должны быть определены как отдельные параметры:

 swagger: '2.0'
...
paths:
  /info:
    get:
      parameters:
        - in: query
          name: sort[name]
          type: integer
        - in: query
          name: sort[age]
          type: integer
      responses:
        200:
          description: OK