Cuando tu API admite múltiples formatos de datos, tiene campos condicionales o utiliza patrones de herencia, las palabras clave de composición de esquemas de OpenAPI te ayudan a documentar estas estructuras flexibles. Con oneOf, anyOf y allOf, puedes describir APIs que manejan diferentes tipos de entrada o combinan múltiples esquemas en modelos de datos completos.

Palabras clave oneOf, anyOf, allOf

Para tipos de datos complejos, OpenAPI ofrece palabras clave para combinar esquemas:
  • allOf: Combina varios esquemas (como fusionar objetos o extender un esquema base). Funciona como un operador lógico and.
  • anyOf: Acepta datos que coincidan con cualquiera de los esquemas proporcionados. Funciona como un operador lógico or.
  • oneOf: Acepta datos que coincidan exactamente con uno de los esquemas proporcionados. Funciona como un operador lógico exclusive-or.
Mintlify trata oneOf y anyOf de manera idéntica, ya que la diferencia práctica rara vez afecta el uso de la API.
Para ver las especificaciones detalladas de estas palabras clave, consulta la documentación de OpenAPI.
La palabra clave not no es compatible actualmente.

Combinación de esquemas con allOf

Cuando usas allOf, Mintlify realiza un preprocesamiento en tu documento de OpenAPI para mostrar combinaciones complejas de forma legible. Por ejemplo, cuando combinas dos esquemas de objeto con allOf, Mintlify fusiona las propiedades de ambos en un único objeto. Esto resulta especialmente útil al aprovechar los componentes reutilizables de OpenAPI.
org_with_users:
  allOf:
    - $ref: '#/components/schemas/Org'
    - type: object
      properties:
        users:
          type: array
          description: Una lista que contiene a todos los usuarios de la organización
# ...
components:
  schemas:
    Org:
      type: object
      properties:
        id:
          type: string
          description: El ID de la organización
org_with_users
object

Proporcionar opciones con oneOf y anyOf

Cuando uses oneOf o anyOf, las opciones se muestran en un contenedor con pestañas. Especifica un campo title en cada subesquema para asignar nombre a las opciones. Por ejemplo, así podrías mostrar dos tipos de direcciones de entrega:
delivery_address:
  oneOf:
    - title: StreetAddress
      type: object
      properties:
        address_line_1:
          type: string
          description: La dirección de la calle del destinatario
        # ...
    - title: POBox
      type: object
      properties:
        box_number:
          type: string
          description: El número del apartado postal
        # ...
delivery_address
object
address_line_1
string
La dirección de la calle de la residencia