Saltar al contenido

Cómo especificar que una propiedad puede ser nula o una referencia con swagger

Solución:

OpenAPI 3.1

Defina la propiedad como oneOf de El $ref y type: 'null'.

Versión YAML:

foo:
  oneOf:
    - type: 'null'   # Note the quotes around 'null'
    - $ref: '#/components/schemas/Foo'

Versión JSON:

"foo": {
    "oneOf": [
        { "type": "null" },
        { "$ref": "#/components/schemas/Foo" }
    ]
}

OpenAPI 3.0

Versión YAML:

foo:
  nullable: true
  allOf:
  - $ref: '#/components/schemas/Foo'

Versión JSON:

"foo": {
    "nullable": true,
    "allOf": [
        { "$ref": "#/components/schemas/Foo" }
    ]
}

En OAS 3.0, envolviendo $ref dentro allOf es necesario combinar el $ref con otras palabras clave, porque $ref sobrescribe las palabras clave del mismo nivel. Esto se analiza con más detalle en el repositorio de especificaciones de OpenAPI: los objetos de referencia no se combinan bien con “nullable”

No es fácil hacer eso. Incluso casi imposible. Sus opciones :

Esperar

Hay una discusión muy larga sobre este punto, tal vez algún día se haga …

Utilice extensiones de proveedores

Puede utilizar extensiones de proveedores como x-oneOf y x-anyOf. Ya lo he tomado por este camino difícil: debes actualizar todos usó ‘herramientas de arrogancia’ para tener en cuenta las extensiones de estos proveedores.

En mi caso, necesitábamos ‘solo’ para:

  • Desarrolla nuestro propio analizador Jax-RS con anotaciones personalizadas para extraer el archivo API swagger de las fuentes
  • Extiende swagger-codegen para tener en cuenta estas extensiones para generar código java para nuestros clientes
  • Desarrolla nuestro propio swagger-ui: para facilitar este trabajo, agregamos un paso de preprocesamiento para convertir nuestro esquema swagger con nuestras extensiones a un esquema json válido. Es más fácil encontrar un módulo para representar esquemas json que esquemas swagger en javascript. Por contra, abandonamos la idea de probar la API con el botón ‘probarlo’.

Fue hace un año, tal vez ahora …

Refactorice sus API

Muchos proyectos no necesitan anyOf y oneOf, ¿por qué no nosotros?

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *