référencement OpenAPI 2.0, Schema Object ou Swagger 2.0, Schema Object, et la définition du champ discriminator
que:"discriminateur" dans le polymorphisme, OpenAPI 2.0 (Swagger 2.0)
ajoute le support pour le polymorphisme. Le discriminant est le nom de la propriété de schéma utilisé pour différencier les autres schémas qui héritent de ce schéma. Le nom de propriété utilisé DOIT être défini sur ce schéma et DOIT être dans la liste de propriétés
required
. Lorsqu'il est utilisé, la valeur DOIT être le nom de ce schéma ou de tout schéma qui en hérite.
Mes questions:/confusions
- Il est ambigu pour moi, quel rôle il joue exactement dans l'héritage ou polymorphisme. Pourrait-on expliquer s'il vous plaît
discriminator
avec un exemple de travail montrant ce qu'il fait exactement et si nous ne l'utilisons pas? Des erreurs, des avertissements ou des outils qui en dépendent pour certaines opérations? - Est-il vrai que swagger-editor ne prend pas en charge
discriminator
et que ce champ est utilisé dans d'autres outils?
Ce que j'ai essayé jusqu'à présent:
- J'ai essayé d'utiliser swagger-editor et l'exemple de la même documentation (également mentionné ci-dessous), de jouer avec cette propriété pour voir si je peut voir l'un de ses comportements spéciaux. J'ai changé la propriété, l'ai enlevée et ai étendu le modèle
Dog
à un niveau plus profond et ai essayé la même chose sur le nouveau sous-modèle, mais je n'ai vu aucun changement dans l'aperçu de swagger-editor. - J'ai essayé de chercher en ligne, et en particulier des questions de stackoverflow, mais je n'ai trouvé aucune information pertinente.
L'exemple de code que je faisais des expériences:
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
Lorsque aucun outil soutien 'de discriminator', cela signifie qu'il est inutile d'utiliser alors. – Musa
Il peut être utilisé si votre schéma a une propriété utilisée pour identifier le type. Dans un tel cas, 'discriminator' est naturellement adapté et peut aider les autres développeurs à comprendre la relation de polymorphisme. Si vous utilisez un outil tiers tel que [ReDoc] (https://github.com/Rebilly/ReDoc) prenant en charge 'discriminator', cela peut être utile. – Wilson
@ wilson @ musa. ReDoc auteur ici. Ce que je peux ajouter, c'est que 'discriminator' est vraiment difficile à utiliser du point de vue de l'auteur de l'outil. Franchement parlant, je ne peux pas me rappeler d'autres outils que ReDoc qui utilisent n'importe quel discriminateur :( Voici un lien vers gif de la façon dont le discriminateur est utilisé dans ReDoc: https://github.com/Rebilly/ReDoc/raw/master/ docs/images/discriminator-demo.gif @Wilson vous êtes invités à l'attacher à votre réponse – RomanHotsiy