Wenn Ihre API mehrere Datenformate akzeptiert, bedingte Felder hat oder Vererbungsmuster nutzt, helfen Ihnen die Schema-Kompositions-Keywords von OpenAPI, diese flexiblen Strukturen zu dokumentieren. Mit oneOf, anyOf und allOf können Sie APIs beschreiben, die unterschiedliche Eingabetypen verarbeiten oder mehrere Schemata zu umfassenden Datenmodellen kombinieren.

oneOf, anyOf, allOf Schlüsselwörter

Für komplexe Datentypen stellt OpenAPI Schlüsselwörter zum Kombinieren von Schemas bereit:
  • allOf: Kombiniert mehrere Schemas (z. B. zum Zusammenführen von Objekten oder Erweitern eines Basisschemas). Entspricht einem and-Operator.
  • anyOf: Akzeptiert Daten, die einem der angegebenen Schemas entsprechen. Entspricht einem or-Operator.
  • oneOf: Akzeptiert Daten, die genau einem der angegebenen Schemas entsprechen. Entspricht einem exclusive-or-Operator.
Mintlify behandelt oneOf und anyOf identisch, da der praktische Unterschied die Nutzung der API selten beeinflusst.
Ausführliche Spezifikationen dieser Schlüsselwörter finden Sie in der OpenAPI-Dokumentation.
Das Schlüsselwort not wird derzeit nicht unterstützt.

Schemas mit allOf kombinieren

Wenn Sie allOf verwenden, führt Mintlify eine Vorverarbeitung Ihres OpenAPI-Dokuments durch, um komplexe Kombinationen gut lesbar darzustellen. Wenn Sie beispielsweise zwei Objekt-Schemas mit allOf kombinieren, fasst Mintlify die Eigenschaften beider zu einem einzigen Objekt zusammen. Das ist besonders nützlich, wenn Sie die wiederverwendbaren Components von OpenAPI nutzen.
org_with_users:
  allOf:
    - $ref: '#/components/schemas/Org'
    - type: object
      properties:
        users:
          type: array
          description: An array containing all users in the organization
# ...
components:
  schemas:
    Org:
      type: object
      properties:
        id:
          type: string
          description: The ID of the organization
org_with_users
object

Optionen mit oneOf und anyOf bereitstellen

Wenn Sie oneOf oder anyOf verwenden, werden die Optionen in einem Registerkarten-Container angezeigt. Geben Sie in jedem Unterschema ein title-Feld an, um den Optionen Namen zu geben. So können Sie beispielsweise zwei unterschiedliche Arten von Lieferadressen darstellen:
delivery_address:
  oneOf:
    - title: StreetAddress
      type: object
      properties:
        address_line_1:
          type: string
          description: The street address of the recipient
        # ...
    - title: POBox
      type: object
      properties:
        box_number:
          type: string
          description: The number of the PO Box
        # ...
delivery_address
object
address_line_1
string
Die Straßenadresse des Wohnorts