Solución:
Según este grupo de Google, discriminator
se utiliza en la parte superior del allOf
propiedad y se define en el super tipo para polimorfismo. Si discriminator
no se utiliza, el allOf
La palabra clave describe que un modelo contiene las propiedades de otros modelos de composición.
Al igual que en su código de muestra, Pet
es un super tipo con propiedad de petType
identificado como el discriminator
y Cat
es un subtipo de Pet
. A continuación se muestra un ejemplo json de un Cat
objeto:
{
"petType": "Cat",
"name": "Kitty"
}
El uso de discriminator
tiene la intención de indicar la propiedad utilizada para identificar el tipo de un objeto. Asume que hay herramientas que pueden soportar correctamente los objetos de definición con el uso de discriminator
, es posible determinar el tipo escaneando la propiedad. Por ejemplo, identificar el objeto es un Cat
de acuerdo a petType
.
sin embargo, el discriminator
El campo no está bien definido en la especificación de la versión actual o en los ejemplos (consulte el número 403). Hasta donde yo sé, no hay herramientas proporcionadas por Swagger que lo apoyen adecuadamente en este momento.
discriminator
se puede utilizar si el modelo tiene una propiedad utilizada para determinar el tipo. En este caso, se ajusta naturalmente y se puede utilizar como indicador para que otros desarrolladores comprendan la relación del polimorfismo. Si herramientas de terceros como ReDoc que admiten discriminator
(ver petType
en este gif y ejemplo), puede resultarle útil.
La funcionalidad del discriminador se ha mejorado mucho en OpenApi 3. Ahora proporciona un objeto discriminador que contiene el nombre de la propiedad del discriminador, así como un mapeo de los valores de esa propiedad a los nombres de esquema.
(Me doy cuenta de que preguntaste sobre OpenApi 2, pero esto ha mejorado tanto en 3 que espero que puedas usarlo).
Consulte: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#discriminatorObject para obtener las especificaciones reales