Quando sua API aceita múltiplos formatos de dados, tem campos condicionais ou utiliza padrões de herança, as palavras-chave de composição de esquemas do OpenAPI ajudam a documentar essas estruturas flexíveis. Com oneOf, anyOf e allOf, você pode descrever APIs que lidam com diferentes tipos de entrada ou combinam vários esquemas em modelos de dados abrangentes.

Palavras-chave oneOf, anyOf, allOf

Para tipos de dados complexos, OpenAPI fornece palavras-chave para combinar esquemas:
  • allOf: Combina vários esquemas (como mesclar objetos ou estender um esquema base). Funciona como um operador and.
  • anyOf: Aceita dados que correspondem a qualquer um dos esquemas fornecidos. Funciona como um operador or.
  • oneOf: Aceita dados que correspondem exatamente a um dos esquemas fornecidos. Funciona como um operador exclusive-or.
O Mintlify trata oneOf e anyOf de forma idêntica, pois a diferença prática raramente impacta o uso da API.
Para especificações detalhadas dessas palavras-chave, consulte a documentação do OpenAPI.
A palavra-chave not não é compatível no momento.

Combinando esquemas com allOf

Quando você usa allOf, a Mintlify faz um pré-processamento no seu documento OpenAPI para exibir combinações complexas de forma legível. Por exemplo, ao combinar dois esquemas de objeto com allOf, a Mintlify une as propriedades de ambos em um único objeto. Isso é especialmente útil ao aproveitar os components reutilizáveis do OpenAPI.
org_with_users:
  allOf:
    - $ref: '#/components/schemas/Org'
    - type: object
      properties:
        users:
          type: array
          description: Uma lista contendo todos os usuários da organização
# ...
components:
  schemas:
    Org:
      type: object
      properties:
        id:
          type: string
          description: O ID da organização
org_with_users
object

Fornecendo opções com oneOf e anyOf

Quando você usa oneOf ou anyOf, as opções são exibidas em um contêiner com abas. Especifique um campo title em cada subschema para nomear as opções. Por exemplo, veja como você pode exibir dois tipos diferentes de endereços de entrega:
delivery_address:
  oneOf:
    - title: StreetAddress
      type: object
      properties:
        address_line_1:
          type: string
          description: O endereço residencial do destinatário
        # ...
    - title: POBox
      type: object
      properties:
        box_number:
          type: string
          description: O número da caixa postal
        # ...
delivery_address
object
address_line_1
string
O endereço residencial