Ссылка OpenAPI 2.0, объект схемы или Swagger 2.0, объект схемы и определение поля discriminator
как:
Добавляет поддержку полиморфизма. Дискриминатор - это имя свойства схемы, которое используется для различения другой схемы, наследующей эту схему. Используемое имя свойства ДОЛЖНО быть определено в этой схеме, и оно ДОЛЖНО находиться в списке свойств
required
. При использовании значение ДОЛЖНО быть именем этой схемы или любой схемы, которая наследует его.
Мои путаницы/вопросы:
- Мне неоднозначно, какую роль он играет в наследовании или полиморфизме. Может кто-нибудь объяснить
discriminator
рабочим примером, показывающим, что он делает, и что, если мы его не используем? Любые ошибки, предупреждения или любые инструменты, которые зависят от него для некоторых операций? - В этом случае swagger-editor не поддерживает
discriminator
, и это поле используется в некоторых других инструментах?
Что я пробовал до сих пор:
- Я попытался использовать swagger-editor и пример из той же документации (также упоминавшейся ниже), чтобы играть с этим свойством посмотрим, смогу ли я увидеть какое-либо его особое поведение. Я изменил свойство, удалил его и расширил модель
Dog
на один уровень глубже и попробовал то же самое в новой подмодее, но я не видел никаких изменений в предварительном просмотре чванство-редактор. - Я пробовал искать в Интернете и специально вопросы, связанные с stackoverflow, но не нашел никакой соответствующей информации.
Пример кода, который я использовал для экспериментов:
definitions:
Pet:
type: object
discriminator: petType
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize