"Discriminador" no polimorfismo, OpenAPI 2.0 (Swagger 2.0)
ReferenciamentoOpenAPI 2.0, objeto de esquemaouSwagger 2.0, objeto de esquemae a definição dediscriminator
campo como:
Adiciona suporte para polimorfismo. O discriminador é o nome da propriedade do esquema usado para diferenciar outros esquemas que herdam esse esquema. O nome da propriedade DEVE ser definido neste esquema e DEVE estar norequired
lista de propriedades. Quando usado, o valor DEVE ser o nome desse esquema ou de qualquer esquema que o herda.
Minhas confusões / perguntas:
É ambíguo para mim, qual o papel que exatamente desempenha na herança ou polimorfismo. Alguém poderia explicardiscriminator
com um exemplo de trabalho mostrando o que exatamente faz e se não o usarmos? Algum erro, aviso ou ferramenta que depende dele para algumas operações?É o caso queeditor de arrogância não suportadiscriminator
, e esse campo é usado em outras ferramentas?O que eu tentei até agora:
Eu tentei usareditor de arrogância e o exemplo da mesma documentação (também mencionada abaixo), para brincar com essa propriedade para ver se consigo ver algum de seus comportamentos especiais. Alterei a propriedade, removi-a e estendi oDog
modelo para um nível mais profundo e tentei o mesmo no novo submodelo, mas não vi nenhuma alteração na visualização deeditor de arrogância.Tentei pesquisar online e, especialmente, perguntas sobre o stackoverflow, mas não encontrei nenhuma informação relevante.O código de exemplo que eu costumava fazer experimentos:
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