Взаимоисключающие свойства в чванстве

Как мне указать, что в my_object у вас может быть свойство_1 или свойство_2, но не оба?

my_object:
  type: object
  properties:
    property_1:
      type: string
    property_2:
      type: string

Являются ли property_1 и property_2 единственными свойствами в этом объекте или у него могут быть и другие свойства?

Helen 11.04.2019 09:52

@Helen, у него есть и другие свойства

Andres 11.04.2019 10:16

Являются ли property1/property2 обязательными (т. е. одно или другое ДОЛЖНО присутствовать) или они необязательны (т. е. одно или другое МОЖЕТ присутствовать)? Есть ли обязательные свойства среди других свойств?

Helen 11.04.2019 10:31

@Helen, хотя бы один из них должен присутствовать.

Andres 11.04.2019 12:22
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
2
5
2 366
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете переключиться на OpenAPI 3.0, который поддерживает ключевое слово oneOf для определения взаимоисключающих условий:

вот пример:

 my_object:
 type: object
 properties:
   property_1:
     type: string
   property_2:
    type: integer
 oneOf:
- required: [property_1]
- required: [property_2]

Этот ответ неверен. Смешанные типы != взаимоисключающие свойства.

Helen 11.04.2019 17:40

@Helen, спасибо за отзыв, я отредактировал свой ответ.

Hasni Iheb 11.04.2019 18:14

В OpenAPI 3.0 (openapi: 3.0.0) вы можете использовать ключевое слово oneOf для определения взаимоисключающих условий. Эта схема требует, чтобы присутствовал либо property_1, либо property_2, но не оба:

my_object:
  type: object
  properties:
    property_1:
      type: string
    property_2:
      type: string
    property_3:
      type: string
  oneOf:
    - required: [property_1]
    - required: [property_2]

Если хотя бы один этих двух свойств должен присутствовать, используйте вместо этого anyOf.

Примечание: Хотя oneOf является частью спецификации OpenAPI (например, вы можете писать определения API, включающие oneOf), фактическая инструментальная поддержка oneOf может различаться и быть ограниченной.


Если вы используете OpenAPI 2.0 (swagger: "2.0"), он не поддерживает oneOf, поэтому вы можете документировать это условие только устно в описании схемы или описаниях свойств.

Это не работает, по крайней мере, в SwaggerHub: роли: тип: свойства объекта: конкретные: тип: элементы массива: $ref: '#/components/schemas/Role' fromProto: тип: логическое значение по умолчанию: true oneOf: - обязательно: [специфические ] - требуется: [fromProto][![Результаты документации:][1]][1][1]: i.stack.imgur.com/XGXyp.png

cvigo 29.09.2020 12:38

@cvigo Откройте вопрос здесь: github.com/swagger-api/swagger-ui/issues

Helen 29.09.2020 21:07

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