«Дискриминатор» в полиморфизме, OpenAPI 2.0 (Swagger 2.0)
привязкаOpenAPI 2.0, объект схемы, или жеSwagger 2.0, объект схемыи определениеdiscriminator
поле как:
Добавлена поддержка полиморфизма. Дискриминатор - это имя свойства схемы, которое используется для различения других схем, которые наследуют эту схему. Используемое имя свойства ДОЛЖНО быть определено в этой схеме, и оно ДОЛЖНО быть вrequired
список свойств. При использовании значение ДОЛЖНО быть именем этой схемы или любой схемы, которая ее наследует.
Мои заблуждения / вопросы:
Мне не ясно, какую именно роль он играет в наследовании или полиморфизме. Может кто-нибудь объяснить, пожалуйстаdiscriminator
с рабочим примером, показывающим, что именно он делает, и что, если мы его не используем? Любые ошибки, предупреждения или какие-либо инструменты, которые зависят от этого для некоторых операций?Это тот случай, когдачванство-редактор не поддерживаетсяdiscriminator
, а это поле используется в некоторых других инструментах?Что я уже пробовал:
Я пытался использоватьчванство-редактор и пример из той же документации (также упомянутый ниже), чтобы поиграть с этим свойством, чтобы увидеть, вижу ли я какое-либо из его специальных поведений. Я изменил свойство, удалил его и расширил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