> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.another-horizon.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration d’OpenAPI

> Générez automatiquement des pages d’API à partir de votre spécification OpenAPI.

OpenAPI est une spécification destinée à décrire des API. Mintlify prend en charge les documents OpenAPI 3.0+ pour générer une documentation d’API interactive et la maintenir à jour.

<div id="add-an-openapi-specification-file">
  ## Ajouter un fichier de spécification OpenAPI
</div>

Pour documenter vos endpoints avec OpenAPI, vous avez besoin d'une ou plusieurs spécifications OpenAPI valides au format JSON ou YAML qui respectent la [spécification OpenAPI 3.0+](https://swagger.io/specification/).

Ajoutez des spécifications OpenAPI à votre référentiel de documentation ou hébergez-les en ligne de manière à pouvoir y accéder via une URL.

Référencez autant de spécifications OpenAPI que nécessaire dans l'élément `navigation` de votre fichier `docs.json` pour créer des pages pour vos endpoints d'API. Chaque fichier de spécification génère son propre ensemble d'endpoints.

<CodeGroup>
  ```json Spécification unique theme={null}
  "navigation": {
    "tabs": [
      {
        "tab": "API Reference",
        "openapi": "openapi.json"
      }
    ]
  }
  ```

  ```json Plusieurs spécifications theme={null}
  "navigation": {
    "tabs": [
      {
        "tab": "API Reference",
        "openapi": [
          "openapi/v1.json",
          "openapi/v2.json"
        ]
      }
    ]
  }
  ```
</CodeGroup>

<Note>
  Mintlify prend en charge `$ref` pour les **références internes uniquement** au sein d'un seul document OpenAPI. Les références externes ne sont pas prises en charge.
</Note>

<div id="describe-your-api">
  ### Décrivez votre API
</div>

Nous recommandons les ressources suivantes pour apprendre et rédiger votre spécification OpenAPI.

* [Guide OpenAPI de Swagger](https://swagger.io/docs/specification/v3_0/basic-structure/) pour apprendre la syntaxe d’OpenAPI.
* [Sources Markdown de la spécification OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/) pour consulter les détails de la dernière version de la spécification OpenAPI.
* [Swagger Editor](https://editor.swagger.io/) pour modifier, valider et déboguer votre document OpenAPI.
* [Mint CLI](https://www.npmjs.com/package/mint) pour valider votre document OpenAPI avec la commande : `mint openapi-check <openapiFilenameOrUrl>`.

<Note>
  Le guide OpenAPI de Swagger porte sur OpenAPI v3.0, mais la quasi-totalité des informations s’applique à v3.1. Pour en savoir plus sur les différences entre v3.0 et v3.1, consultez l’article du blog OpenAPI [Migrating from OpenAPI 3.0 to 3.1.0](https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0).
</Note>

<div id="specify-the-base-url-for-your-api">
  ### Spécifiez l’URL de base de votre API
</div>

Pour activer l’aire de jeu de l’API, ajoutez un champ `servers` à votre spécification OpenAPI avec l’URL de base de votre API.

```json theme={null}
{
  "servers": [
    {
      "url": "https://api.example.com/v1"
    }
  ]
}
```

Dans une spécification OpenAPI, les différents points de terminaison (endpoints) d’API sont définis par leurs chemins, comme `/users/{id}` ou simplement `/`. L’URL de base indique où ces chemins doivent être ajoutés. Pour en savoir plus sur la configuration du champ `servers`, consultez la page [API Server and Base Path](https://swagger.io/docs/specification/api-host-and-base-path/) de la documentation OpenAPI.

Le bac à sable de l’API utilise ces URL de serveur pour déterminer où envoyer les requêtes. Si vous spécifiez plusieurs serveurs, un menu déroulant permet aux utilisateurs de basculer entre eux. Si vous ne spécifiez aucun serveur, le bac à sable de l’API utilise le mode simple, puisqu’il ne peut pas envoyer de requêtes sans URL de base.

Si votre API comporte des points de terminaison accessibles à différentes URL, vous pouvez [surcharger le champ `servers`](https://swagger.io/docs/specification/v3_0/api-host-and-base-path/#overriding-servers) pour un chemin ou une opération donnés.

<div id="specify-authentication">
  ### Spécifier l’authentification
</div>

Pour activer l’authentification dans votre documentation et votre environnement de test API, configurez les champs `securitySchemes` et `security` dans votre spécification OpenAPI. Les descriptions d’API et l’environnement de test API ajoutent des champs d’authentification en fonction des paramètres de sécurité de votre spécification OpenAPI.

<Steps>
  <Step title="Définissez votre méthode d’authentification.">
    Ajoutez un champ `securitySchemes` pour définir la manière dont les utilisateurs s’authentifient.

    Cet exemple montre une configuration pour l’authentification de type Bearer.

    ```json theme={null}
    {
      "components": {
        "securitySchemes": {
          "bearerAuth": {
            "type": "http",
            "scheme": "bearer"
          }
        }
      }
    }
    ```
  </Step>

  <Step title="Appliquez l’authentification à vos endpoints.">
    Ajoutez un champ `security` pour rendre l’authentification obligatoire.

    ```json theme={null}
    {
      "security": [
        {
          "bearerAuth": []
        }
      ]
    }
    ```
  </Step>
</Steps>

Les types d’authentification courants incluent :

* [Clés d’API](https://swagger.io/docs/specification/authentication/api-keys/) : pour les clés transmises via l’en-tête, les paramètres de requête ou les cookies.
* [Bearer](https://swagger.io/docs/specification/authentication/bearer-authentication/) : pour les jetons JWT ou OAuth.
* [Basic](https://swagger.io/docs/specification/authentication/basic-authentication/) : pour le nom d’utilisateur et le mot de passe.

Si différents endpoints de votre API nécessitent différentes méthodes d’authentification, vous pouvez [remplacer le champ `security`](https://swagger.io/docs/specification/authentication/#:~:text=you%20can%20apply%20them%20to%20the%20whole%20API%20or%20individual%20operations%20by%20adding%20the%20security%20section%20on%20the%20root%20level%20or%20operation%20level%2C%20respectively.) pour une opération donnée.

Pour plus d’informations sur la définition et l’application de l’authentification, consultez la section [Authentication](https://swagger.io/docs/specification/authentication/) de la documentation OpenAPI.

<div id="customize-your-endpoint-pages">
  ## Personnalisez les pages de vos endpoints
</div>

Personnalisez les pages de vos endpoints en ajoutant l’extension `x-mint` à votre spécification OpenAPI. L’extension `x-mint` offre un contrôle accru sur la manière dont votre documentation d’API est générée et affichée.

<div id="metadata">
  ### Métadonnées
</div>

Remplacez les métadonnées par défaut des pages d’API générées en ajoutant `x-mint: metadata` à n’importe quelle opération. Vous pouvez utiliser n’importe quel champ de métadonnées valide dans le front matter MDX, à l’exception de `openapi`.

```json {7-13} theme={null}
{
  "paths": {
    "/users": {
      "get": {
        "summary": "Obtenir les utilisateurs",
        "description": "Récupérer la liste des utilisateurs",
        "x-mint": {
          "metadata": {
            "title": "Lister tous les utilisateurs",
            "description": "Récupérer les données utilisateur paginées avec des options de filtrage",
            "og:title": "Afficher la liste des utilisateurs"
          }
        },
        "parameters": [
          {
            // Configuration des paramètres
          }
        ]
      }
    }
  }
}
```

<div id="content">
  ### Contenu
</div>

Ajoutez du contenu avant la documentation API générée automatiquement à l’aide de `x-mint: content`. L’extension `x-mint: content` est compatible avec tous les composants MDX de Mintlify ainsi que leur mise en forme.

```json {6-8} theme={null}
{
  "paths": {
    "/users": {
      "post": {
        "summary": "Créer un utilisateur",
        "x-mint": {
          "content": "## Prérequis\n\nCe point de terminaison nécessite des privilèges administrateur et est soumis à une limitation du débit.\n\n<Note>Les adresses e-mail des utilisateurs doivent être uniques dans l'ensemble du système.</Note>"
        },
        "parameters": [
          {
            // Configuration des paramètres
          }
        ]
      }
    }
  }
}
```

<div id="href">
  ### Href
</div>

Modifiez l’URL de la page de point de terminaison dans votre documentation avec `x-mint: href`. Lorsque `x-mint: href` est présent, l’entrée de navigation renvoie directement vers l’URL spécifiée au lieu de générer une page d’API.

```json {6-8, 14-16} theme={null}
{
  "paths": {
    "/legacy-endpoint": {
      "get": {
        "summary": "Point de terminaison obsolète",
        "x-mint": {
          "href": "/deprecated-endpoints/legacy-endpoint"
        }
      }
    },
    "/documented-elsewhere": {
      "post": {
        "summary": "Point de terminaison spécial",
        "x-mint": {
          "href": "/guides/special-endpoint-guide"
        }
      }
    }
  }
}
```

<div id="auto-populate-api-pages">
  ## Remplir automatiquement les pages d’API
</div>

Ajoutez un champ `openapi` à n’importe quel élément de navigation dans votre `docs.json` pour générer automatiquement des pages pour les endpoints OpenAPI. Vous pouvez contrôler l’emplacement de ces pages dans votre structure de navigation, soit en tant que sections API dédiées, soit aux côtés d’autres pages.

Le champ `openapi` accepte soit un chemin de fichier dans votre dépôt de documentation, soit une URL vers un document OpenAPI hébergé.

Les pages d’endpoint générées ont les métadonnées par défaut suivantes :

* `title` : le champ `summary` de l’opération, s’il est présent. S’il n’y a pas de `summary`, le titre est généré à partir de la méthode HTTP et de l’endpoint.
* `description` : le champ `description` de l’opération, s’il est présent.
* `version` : la valeur `version` de l’ancre ou de l’onglet parent, si elle est présente.
* `deprecated` : le champ `deprecated` de l’opération. Si `true`, une étiquette « obsolète » apparaît à côté du titre de l’endpoint dans la navigation latérale et sur la page de l’endpoint.

<Tip>
  Pour exclure des endpoints spécifiques de vos pages d’API générées automatiquement, ajoutez la propriété [x-hidden](/fr/api-playground/managing-page-visibility#x-hidden) à l’opération dans votre spécification OpenAPI.
</Tip>

Il existe deux approches pour ajouter des pages d’endpoint à votre documentation :

1. **Sections API dédiées** : référencez des spécifications OpenAPI dans des éléments de navigation pour des sections API dédiées.
2. **Endpoints sélectifs** : référencez des endpoints spécifiques dans votre navigation, aux côtés d’autres pages.

<div id="dedicated-api-sections">
  ### Sections d’API dédiées
</div>

Générez des sections d’API dédiées en ajoutant un champ `openapi` à un élément de navigation, sans autres pages. Tous les points de terminaison de la spécification sont inclus.

```json {5} theme={null}
"navigation": {
  "tabs": [
    {
        "tab": "Référence API",
        "openapi": "https://petstore3.swagger.io/api/v3/openapi.json"
    }
  ]
}
```

Pour organiser plusieurs spécifications OpenAPI dans des sections distinctes de votre documentation, assignez chaque spécification à un groupe différent dans votre hiérarchie de navigation. Chaque groupe peut référencer sa propre spécification OpenAPI.

```json {8-11, 15-18} theme={null}
"navigation": {
  "tabs": [
    {
      "tab": "Référence API",
      "groups": [
        {
          "group": "API Utilisateurs",
          "openapi": {
            "source": "/path/to/users-openapi.json",
            "directory": "users-api-reference"
          }
        },
        {
          "group": "API Administration",
          "openapi": {
            "source": "/path/to/admin-openapi.json",
            "directory": "admin-api-reference"
          }
        }
      ]
    }
  ]
}
```

<Note>
  Le champ `directory` est facultatif et indique où les pages d’API générées sont stockées dans votre dépôt de documentation. S’il n’est pas défini, le répertoire par défaut est `api-reference` à la racine de votre dépôt.
</Note>

<div id="selective-endpoints">
  ### Points de terminaison sélectifs
</div>

Si vous souhaitez mieux contrôler l’emplacement des points de terminaison dans votre documentation, vous pouvez référencer des points de terminaison précis dans votre navigation. Cette approche vous permet de générer des pages pour des points de terminaison d’API aux côtés d’autres contenus. Vous pouvez également utiliser cette approche pour combiner des points de terminaison provenant de différentes spécifications OpenAPI.

<div id="set-a-default-openapi-spec">
  #### Définir une spécification OpenAPI par défaut
</div>

Configurez une spécification OpenAPI par défaut pour un élément de navigation. Référencez ensuite des points de terminaison spécifiques dans le champ `pages`.

```json {12, 15-16} theme={null}
"navigation": {
  "tabs": [
    {
      "tab": "Démarrage",
      "pages": [
        "quickstart",
        "installation"
      ]
    },
    {
      "tab": "Référence API",
      "openapi": "/path/to/openapi.json",
      "pages": [
        "api-overview",
        "GET /users",
        "POST /users",
        "guides/authentication"
      ]
    }
  ]
}
```

Toute entrée de page correspondant au format `METHOD /path` génère une page d’API pour ce point de terminaison à partir de la spécification OpenAPI par défaut.

<div id="openapi-spec-inheritance">
  #### Héritage de la spécification OpenAPI
</div>

Les spécifications OpenAPI sont héritées au sein de la hiérarchie de navigation. Les éléments de navigation enfants héritent de la spécification OpenAPI de leur parent, sauf s’ils définissent la leur.

```json {3, 7-8, 11, 13-14} theme={null}
{
  "group": "Référence API",
  "openapi": "/path/to/openapi-v1.json",
  "pages": [
    "aperçu",
    "authentification",
    "GET /users",
    "POST /users",
    {
      "group": "Commandes",
      "openapi": "/path/to/openapi-v2.json",
      "pages": [
        "GET /orders",
        "POST /orders"
      ]
    }
  ]
}
```

<div id="individual-endpoints">
  #### Points de terminaison individuels
</div>

Faites référence à des points de terminaison spécifiques sans définir de spécification OpenAPI par défaut en incluant le chemin d’accès au fichier. Vous pouvez référencer des points de terminaison issus de plusieurs spécifications OpenAPI dans une même section de documentation.

```json {5-6} theme={null}
"navigation": {
  "pages": [
    "introduction",
    "user-guides",
    "/path/to/users-openapi.json POST /users",
    "/path/to/orders-openapi.json GET /orders"
  ]
}
```

Cette approche est utile lorsque vous avez besoin de points de terminaison individuels provenant de différentes spécifications, que vous souhaitez inclure uniquement certains points de terminaison, ou que vous voulez les intégrer aux côtés d’autres types de documentation.

<div id="create-mdx-pages-from-your-openapi-specification">
  ## Créer des pages MDX à partir de votre spécification OpenAPI
</div>

Pour un contrôle plus fin de chaque page d’endpoint, créez des pages MDX à partir de votre spécification OpenAPI. Vous pourrez ainsi personnaliser les métadonnées et le contenu des pages, ainsi que réorganiser ou exclure des pages de votre navigation, tout en conservant les paramètres et réponses générés automatiquement.

Il existe deux façons de documenter votre spécification OpenAPI avec des pages MDX distinctes :

* Documenter les endpoints avec le champ `openapi` dans le frontmatter.
* Documenter les modèles de données avec le champ `openapi-schema` dans le frontmatter.

<div id="document-endpoints">
  ### Documenter les endpoints
</div>

Créez une page pour chaque endpoint et indiquez quelle opération OpenAPI afficher en utilisant le champ `openapi` dans le frontmatter.

<CodeGroup>
  ```mdx Example theme={null}
  ---
  title: "Récupérer des utilisateurs"
  description: "Renvoie toutes les plantes du système auxquelles l'utilisateur a accès"
  openapi: "/path/to/openapi-1.json GET /users"
  deprecated: true
  version: "1.0"
  ---
  ```

  ```mdx Format theme={null}
  ---
  title: "titre de la page"
  description: "description de la page"
  openapi: chemin-vers-fichier-openapi méthode chemin
  deprecated: booléen (facultatif)
  version: "chaîne-de-version" (facultatif)
  ---
  ```
</CodeGroup>

La méthode et le chemin doivent correspondre exactement à votre spécification OpenAPI. Si vous avez plusieurs spécifications OpenAPI, incluez le chemin du fichier dans votre référence. Les URL OpenAPI externes peuvent être référencées dans `docs.json`.

<div id="autogenerate-endpoint-pages">
  #### Générer automatiquement des pages d’endpoint
</div>

Pour générer automatiquement des fichiers MDX à partir de votre spécification OpenAPI, utilisez le [scraper](https://www.npmjs.com/package/@mintlify/scraping) de Mintlify.

```bash theme={null}
npx @mintlify/scraping@latest openapi-file <path-to-openapi-file> -o <folder-name>
```

<Tip>
  Ajoutez l’option `-o` pour préciser un dossier où déposer les fichiers. Si aucun dossier n’est indiqué, les fichiers seront créés dans le répertoire de travail.
</Tip>

<div id="document-data-models">
  ### Documenter les modèles de données
</div>

Créez une page pour chaque structure de données définie dans `components.schemas` de votre spécification OpenAPI en utilisant le champ `openapi-schema` dans le frontmatter.

<CodeGroup>
  ```mdx Example theme={null}
  ---
  openapi-schema: OrderItem
  ---
  ```

  ```mdx Format theme={null}
  ---
  openapi-schema: "openapi-file-path schema-key"
  ---
  ```
</CodeGroup>

Si vous avez des schémas portant le même nom dans plusieurs fichiers, indiquez le fichier OpenAPI :

<CodeGroup>
  ```mdx Example theme={null}
  ---
  openapi-schema: en-schema.json OrderItem
  ---
  ```

  ```mdx Format theme={null}
  ---
  openapi-schema: "path-to-schema-file schema-key"
  ---
  ```
</CodeGroup>

<div id="webhooks">
  ## Webhooks
</div>

Les webhooks sont des callbacks HTTP que votre API envoie pour avertir des systèmes externes lorsque des événements se produisent. Les webhooks sont pris en charge dans les documents OpenAPI 3.1+.

Ajoutez un champ `webhooks` à votre document OpenAPI, en parallèle du champ `paths`.

Pour en savoir plus sur la définition des webhooks, consultez la section [Webhooks](https://spec.openapis.org/oas/v3.1.0#oasWebhooks) de la documentation OpenAPI.

Pour créer une page MDX pour un webhook (OpenAPI 3.1+), utilisez `webhook` au lieu d’une méthode HTTP :

```mdx theme={null}
---
title: "Webhook de mise à jour de commande"
description: "Déclenché lorsqu'une commande est mise à jour"
openapi: "openapi.json webhook orderUpdated"
---
```

Le nom du webhook doit correspondre exactement à la clé du champ `webhooks` de votre spécification OpenAPI.
