Создайте отклик API-интерфейса swagger/open с массивом неназванных объектов

Я получаю ответ от http-запроса в следующей форме: это массив безымянных массивов и объектов. Я не могу понять правильную спецификацию Swagger (Open API) для этого случая.

[
  [
    {
      "prop1": "hello",
      "prop2": "hello again"
    },
    {
      "prop1": "bye",
      "prop2": "bye again"
    }
  ],
  {
    "key": 123
  }
]

3 ответа

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

OpenAPI 3.0 поддерживает oneOf, так что можно определить несколько схем для элементов массива:

openapi: 3.0.0
...

paths:
  /something:
    get:
      responses:
        '200':
          description: success
          content:
            application/json:
              schema:
                type: array
                items:
                  oneOf:   # <---------
                    - type: array
                      items:
                        type: object
                        properties:
                          prop1:
                            type: string
                          prop2:
                            type: string
                    - type: object
                      properties:
                        key:
                          type: integer
                      required:
                        - key

OpenAPI 2.0 не поддерживает oneOf или смешанные типы. Максимум, что вы можете сделать, это использовать схему без типов, что означает, что элементы массива могут быть чем угодно - объектами, массивами или примитивами - но вы не можете указать точные типы.

swagger: '2.0'
...
paths:
  /:
    get:
      produces:
        - application/json
      responses:
        '200':
          description: success
          schema:
            type: array
            items: {}   # <---------

            # Example to display in Swagger UI:
            example:
              - - prop1: hello
                  prop2: hello again
                - prop1: bye
                  prop2: bye again
              - key: 123

Вы можете смешивать Yaml с Json:

      openapi: 3.0.3

  /users/all:
    get:
      tags:
        - Users
      summary: Get all datas.
      responses:
        "200":
          description: Create
          content:
            application/json:
              schema:
                type: array
                example:
                  [
                    {
                      "id": 1,
                      "prop1": "CRM",
                      "prop2": 30908,
                      "uf": "SP"
                    }
                  ]
      security:
        - isAuthorize: []

Моё окружение:

      {
  "os": "ubuntu-24.04",
  "node": "^18.x",
  "npm": "^9.x",
  "swagger-jsdoc": "^6.2.8",
  "swagger-ui-express": "^4.6.0",
}

Я нашел способ, спасибо:

"responses": {
      "200": {
        "description": "success",
        "schema": {
          "type": "array",
          "items": [{
           "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "prop1": {
                  "type": "string",
                },
                "prop2": {
                  "type": "string",
                }
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "type": "number"
              }
            }
          }]
        }
      }
    }
  }
Другие вопросы по тегам