Параметр OpenAPI с квадратными скобками и именем переменной - PullRequest
1 голос
/ 23 мая 2019

Я работаю над API, который позволяет выполнять поиск по таким URL-адресам, как:

GET https://example.com/api/data?search[field1]=value1
GET https://example.com/api/data?search[field2]=value2
GET https://example.com/api/data?search[field1]=value1&search[field2]=value2

По сути, вы можете искать одно или несколько значений поля, указав имя поля в скобках.Проблема в том, что имена полей определяются пользователем в их настройках.Имя поля будет строкой, но в противном случае не известно заранее на глобальном уровне.

Этот ответ - это почти то, что я хочу сделать, я просто не могу найтиспособ определить значение в скобках как «любую строку», а не список известных имен.

1 Ответ

1 голос
/ 23 мая 2019

Параметр search может быть определен как объект произвольной формы с использованием deepObject стиля сериализации и minProperties: 1 для обеспечения присутствия хотя бы одного поля в поисковый запрос.

Убедитесь, что вы используете OpenAPI 3.0 (openapi: 3.0.x), а не OpenAPI 2.0 (swagger: "2.0"); последний не поддерживает объекты в строках запроса.

openapi: 3.0.2
...

paths:
  /api/data:
    get:
      parameters:
        - in: query
          name: search
          required: true
          schema:
            type: object
            additionalProperties: true  # Default value, may be omitted
            minProperties: 1
            # Optional example to use as a starting value for "try it out" in Swagger UI
            example: >
              {
                "field1": "value1",
                "field2": "value2"
              }
          style: deepObject
          explode: true
      responses:
        200:
          description: OK
...