> ## Documentation Index
> Fetch the complete documentation index at: https://smartac-justin-client-exports.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Types de données complexes

> Décrivez des API avec des schémas flexibles via oneOf, anyOf et allOf pour les propriétés optionnelles, le polymorphisme et les formats multiples.

Lorsque votre API accepte plusieurs formats de données, comporte des champs conditionnels ou utilise des modèles d’héritage, les mots-clés de composition de schémas d’OpenAPI vous aident à documenter ces structures flexibles. Avec `oneOf`, `anyOf` et `allOf`, vous pouvez décrire des API qui prennent en charge différents types d’entrée ou combinent plusieurs schémas en modèles de données complets.

<div id="oneof-anyof-allof-keywords">
  ## Mots-clés `oneOf`, `anyOf`, `allOf`
</div>

Pour les types de données complexes, OpenAPI propose des mots-clés pour combiner des schémas :

* `allOf` : Combine plusieurs schémas (comme la fusion d’objets ou l’extension d’un schéma de base). Fonctionne comme un opérateur « and ».
* `anyOf` : Accepte des données correspondant à l’un des schémas fournis. Fonctionne comme un opérateur « or ».
* `oneOf` : Accepte des données correspondant exactement à un seul des schémas fournis. Fonctionne comme un opérateur « exclusive-or ».

<Warning>Mintlify traite `oneOf` et `anyOf` de la même manière, car la différence pratique influe rarement sur l’utilisation de l’API.</Warning>

Pour des spécifications détaillées de ces mots-clés, consultez la [documentation OpenAPI](https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/).

<Info>Le mot-clé `not` n’est actuellement pas pris en charge.</Info>

<div id="combining-schemas-with-allof">
  ### Combiner des schémas avec `allOf`
</div>

Lorsque vous utilisez `allOf`, Mintlify applique un prétraitement à votre document OpenAPI afin d’afficher des combinaisons complexes de manière lisible. Par exemple, lorsque vous combinez deux schémas d’objet avec `allOf`, Mintlify fusionne les propriétés des deux en un seul objet. Cela est particulièrement utile lorsque vous exploitez les [components](https://swagger.io/docs/specification/components/) réutilisables d’OpenAPI.

```yaml theme={null}
org_with_users:
  allOf:
    - $ref: '#/components/schemas/Org'
    - type: object
      properties:
        users:
          type: array
          description: Un tableau contenant tous les utilisateurs de l'organisation
# ...
components:
  schemas:
    Org:
      type: object
      properties:
        id:
          type: string
          description: L'identifiant de l'organisation
```

<ParamField body="org_with_users" type="object">
  <Expandable>
    <ParamField body="id" type="string">
      L’identifiant de l’organisation
    </ParamField>

    <ParamField body="users" type="object[]">
      Un tableau contenant l’ensemble des utilisateurs de l’organisation
    </ParamField>
  </Expandable>
</ParamField>

<div id="any-and-undefined-types">
  ### Types `any` et `undefined`
</div>

Les champs typés `any` ou `undefined` s’affichent de la même manière que les schémas `oneOf`, avec un sélecteur qui permet aux utilisateurs de choisir une forme concrète avant d’envoyer une requête. Cela permet au playground d’API de proposer une entrée pertinente même lorsque le schéma ne restreint pas la valeur à un seul type.

<div id="providing-options-with-oneof-and-anyof">
  ### Proposer des options avec `oneOf` et `anyOf`
</div>

Lorsque vous utilisez `oneOf` ou `anyOf`, les options s’affichent dans un conteneur à onglets. Indiquez un champ `title` dans chaque sous-schéma pour nommer vos options. Par exemple, voici comment vous pourriez afficher deux types d’adresses de livraison distincts :

```yaml theme={null}
delivery_address:
  oneOf:
    - title: StreetAddress
      type: object
      properties:
        address_line_1:
          type: string
          description: L'adresse postale du destinataire
        # ...
    - title: POBox
      type: object
      properties:
        box_number:
          type: string
          description: Le numéro de la boîte postale
        # ...
```

<ParamField body="delivery_address" type="object">
  <div className="mt-4 rounded-xl border border-gray-100 px-4 pb-4 pt-2 dark:border-white/10">
    <Tabs>
      <Tab title="StreetAddress">
        <ParamField body="address_line_1" type="string">
          L’adresse de la résidence
        </ParamField>
      </Tab>

      <Tab title="POBox">
        <ParamField body="box_number" type="string">
          Le numéro de la case postale
        </ParamField>
      </Tab>
    </Tabs>
  </div>
</ParamField>
