«Дискриминатор» в полиморфизме, 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

Ответы на вопрос(2)

Ваш ответ на вопрос