Как написать определение OpenAPI (Swagger) для этого поля с несколькими типами? - PullRequest
1 голос
/ 17 мая 2019

Я пишу определение OpenAPI для поля params, которое является объектом и содержит поле с именем name, которое по умолчанию имеет строковый тип, но может быть любого типа, например, целое число, число, логическое значение, строка или массив строк, логическое значение, число, целое число.

params: { [имя: строка]: int | строка | номер | логическое значение | int [] | строка [] | номер [] | логическое [] }

Как я могу определить такое поле в OpenAPI?

Я пробовал следующее

  params:
    description: Simple parameters map
    type: object
    additionalProperties:
      name:
        type: object
        oneOf:
          - type: string
          - type: boolean
          - type: integer
          - type: number
          - type: array
            items:
              - string
              - integer
              - number
              - boolean

но это приводит к следующей синтаксической ошибке:

Не должно включать имя дополнительных свойств.

1 Ответ

0 голосов
/ 22 мая 2019

params , который является объектом и включает в себя поле с именем name , которое по умолчанию имеет строковый тип и может быть любого типа, как указано ниже :. Целое число, число, логическая строка или массив строк, логическое число, число, целое число. это может быть что угодно.

" Может быть любым " определяется без указания type. Но в этом случае возможные значения «что угодно» включают объекты и массив объектов, которые вы не упомянули.

params:
  description: Simple parameters map
  type: object
  properties:
    name: {}

    # OR if you want to add a description, use
    # name:
    #   description: Can be anything


Однако, если «что-нибудь» означает только определенные типы, которые вы перечислили, вам нужно anyOf. Обратите внимание, что anyOf поддерживается в OpenAPI 3.0 (openapi: 3.0.0) и не поддерживается в OpenAPI / Swagger 2.0 (swagger: "2.0").

# openapi: 3.0.0

params:
  type: object
  properties:
    name:
      anyOf:
        - type: string
        - type: integer
        - type: number
        - type: boolean
        - type: array
          items:
            type: string
        - type: array
          items:
            type: integer
        - type: array
          items:
            type: number
        - type: array
          items:
            type: boolean
...