API Documentation

OpenAPI

OpenAPI est une description lisible par machine d'une API HTTP. Une seule spécification peut générer la documentation, les clients, les serveurs et les tests — à condition de la maintenir à jour.

intermediate14 min readUpdated 15 sept. 2026
openapi.yaml
yaml
# openapi.yaml
openapi: 3.1.0
info:
  title: Posts API
  version: 1.0.0
paths:
  /posts:
    get:
      summary: List posts
      responses:
        "200":
          description: A list of posts
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Post"
components:
  schemas:
    Post:
      type: object
      required: [id, title]
      properties:
        id: { type: string }
        title: { type: string }
Format
JSON ou YAML
Version actuelle
OpenAPI 3.1
Structure
Paths et opérations
Réutilisation
components et $ref
Docs
Swagger UI, Redoc
Codegen
Clients et serveurs

Pourquoi c'est important

Pourquoi OpenAPI est essentiel

Une source unique de vérité

Une seule spécification décrit chaque endpoint, paramètre et réponse, évitant ainsi tout décalage entre la documentation, les clients et le contrat.

Validation de contrat

La spécification peut valider les requêtes et les réponses lors des tests et au runtime, permettant de détecter les changements breaking précocement.

Un écosystème d'outils complet

Des générateurs produisent des clients typés, des stubs de serveurs, des mocks et de la documentation à partir d'un seul et même fichier.

Le tableau complet

Les trois parties d'une spécification

Les métadonnées décrivent l'API, les paths décrivent les opérations, et les components définissent des schémas réutilisables.

Info et serveurs

Décrire

Titre, version, description et les URLs de base depuis lesquelles l'API est servie.

Paths

Opérer

Chaque path et méthode définit les paramètres, les corps de requête et les réponses.

Components

Réutiliser

Schémas, paramètres et réponses partagés, référencés via $ref.

OpenAPI en un coup d'œil

Le cœur d'une spécification

openapi et info

La version de la spécification et les métadonnées de l'API.

paths

Les URLs et les opérations disponibles pour chacune d'elles.

components

Schémas, paramètres, réponses et schémas de sécurité réutilisables.

$ref

Référence un composant au lieu de le répéter.

security

Déclare les schémas d'authentification tels que les jetons bearer ou OAuth.

Documentation

Swagger UI et Redoc rendent une référence interactive.

Un bref aperçu

De Swagger à un standard industriel

  1. 2010

    Annonce de Swagger

    Lancement d'une spécification et d'outils pour décrire les API REST.

    10
  2. 2015

    Swagger 2.0

    Le format est largement adopté et l'outillage arrive à maturité.

    15
  3. 2017

    OpenAPI Initiative

    La spécification est donnée à la Linux Foundation et renommée.

    17
  4. 2021

    OpenAPI 3.1

    Arrivée de la compatibilité totale avec JSON Schema et des webhooks.

    21
  5. Aujourd'hui

    Le standard de facto

    La plupart des outils d'API consomment ou produisent du OpenAPI.

    Aujourd'hui

Le guide complet

OpenAPI: Tout ce que vous devez savoir

Qu’est-ce qu’OpenAPI ?

OpenAPI est une description lisible par machine d’une API HTTP. Rédigé en YAML ou JSON, un document unique répertorie chaque endpoint, ses paramètres, les corps de requête, les réponses et l’authentification. Comme il est structuré, divers outils peuvent l’exploiter : des interfaces de documentation, des clients typés, des stubs de serveur, des mocks et des validateurs.

Swagger était le nom d’origine ; aujourd’hui, ce terme désigne l’outillage, et plus particulièrement Swagger UI. La spécification elle-même est OpenAPI, et elle est devenue le standard de facto pour décrire les API REST. Si vous avez déjà utilisé une référence d’API interactive avec un bouton « Try it out », vous avez utilisé OpenAPI.

La structure d’un document

Un document OpenAPI comporte quelques sections de premier niveau.

# openapi.yaml
openapi: 3.1.0
info:
  title: Posts API
  version: 1.0.0
servers:
  - url: https://api.example.com/v1
paths:
  /posts:
    get:
      summary: List posts
      responses:
        "200":
          description: A list of posts
  • openapi déclare la version de la spécification.
  • info contient le titre, la version et la description.
  • servers liste les URLs de base.
  • paths décrit chaque endpoint et ses opérations.
  • components contient les éléments réutilisables.

Chemins et opérations

Chaque chemin est associé à une ou plusieurs méthodes HTTP, et chaque opération décrit ses entrées et sorties.

# paths.yaml
paths:
  /posts/{id}:
    get:
      summary: Get a post
      parameters:
        - name: id
          in: path
          required: true
          schema: { type: string }
      responses:
        "200":
          description: The post
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Post"
        "404":
          description: Not found

Les paramètres peuvent se trouver dans le path, le query, le header ou le cookie. Les corps de requête sont déclarés avec un type de contenu et un schéma, et chaque réponse doit lister ses codes de statut et ses structures. De bons résumés et des descriptions précises transforment la spécification en une documentation utile à elle seule.

Composants et références

La réutilisation est la clé du maintien d’une spécification. Définissez vos structures une seule fois et référencez-les avec $ref.

# components.yaml
components:
  schemas:
    Post:
      type: object
      required: [id, title]
      properties:
        id: { type: string }
        title: { type: string }
        publishedAt: { type: string, format: date-time }
  parameters:
    Limit:
      name: limit
      in: query
      schema: { type: integer, minimum: 1, maximum: 100 }
  responses:
    NotFound:
      description: Resource not found

Toute modification apportée au schéma Post met à jour chaque opération qui y fait référence, ce qui évite la désynchronisation courante lors de la duplication des définitions.

Sécurité

L’authentification est déclarée une seule fois et appliquée par opération.

# security.yaml
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

security:
  - bearerAuth: []

Les outils peuvent ensuite envoyer les bons identifiants dans l’interface utilisateur de la documentation, et les clients générés peuvent accepter un paramètre de token.

Documentation et génération de code

La spécification pilote l’outillage :

  • Swagger UI génère une référence interactive où les utilisateurs peuvent tester les requêtes.
  • Redoc génère une page de documentation épurée à trois colonnes.
  • openapi-generator produit des clients et des stubs de serveur dans de nombreux langages.
  • openapi-typescript génère des types TypeScript à partir de la spécification.
  • Spectral analyse la spécification (linting) pour en vérifier la cohérence et le style.
  • Les serveurs de mock fournissent des réponses d’exemple afin que le travail sur le front-end puisse commencer avant que le backend ne soit prêt.
# docs.sh
npx @redocly/cli preview-docs openapi.yaml
npx openapi-typescript openapi.yaml -o src/api-types.ts

Comme tout dérive d’un seul fichier, la documentation, les clients et les types restent cohérents.

Spec-first versus code-first

Il existe deux flux de travail :

  • Spec-first : concevoir le contrat avant l’implémentation. Idéal pour les API publiques, les multiples consommateurs et le travail parallèle entre le front-end et le back-end. La spec est la source de vérité.
  • Code-first : annoter les routes et les types, puis générer la spec. Cela permet de garder la spec proche de l’implémentation et d’éviter la duplication dans les frameworks typés.

Les deux approches fonctionnent. Le risque majeur, dans les deux cas, est de maintenir la documentation manuellement dans un endroit séparé, où elle devient obsolète sans que l’on s’en aperçoive.

Validation et tests de contrat

Un document OpenAPI peut être appliqué, et pas seulement consulté.

  • Validation des requêtes : le middleware rejette les requêtes qui ne correspondent pas à la spécification, permettant ainsi aux handlers de faire confiance à leurs entrées.
  • Validation des réponses : les tests vérifient que les réponses correspondent aux schémas déclarés.
  • Tests de contrat : les clients et les serveurs s’appuient sur la même spécification, permettant de détecter rapidement les changements incompatibles (breaking changes).

C’est là que la spécification prend tout son sens : elle devient un contrat exécutable plutôt qu’une simple décoration.

Bonnes pratiques

  • Maintenez une seule spécification par API et considérez-la comme la source de vérité.
  • Réutilisez les schémas, paramètres et réponses avec $ref.
  • Rédigez des résumés et des descriptions clairs ; ils constitueront votre documentation.
  • Documentez chaque code de statut qu’une opération peut retourner.
  • Validez les requêtes et les réponses par rapport à la spécification.
  • Générez les clients, les types et la documentation plutôt que de les écrire à la main.
  • Passez la spécification au lint et examinez les modifications dans les pull requests.

Erreurs courantes

  • Maintenir la documentation manuellement et séparément de la spec.
  • Dupliquer les schémas en ligne jusqu’à ce qu’ils divergent.
  • Oublier les réponses d’erreur, empêchant ainsi les clients de gérer les échecs.
  • Utiliser des noms et des descriptions vagues qui n’aident pas les consommateurs.
  • Laisser la spec s’écarter de l’implémentation.
  • Sauter l’étape de validation et perdre ainsi le principal avantage du contrat.

Et après ?

OpenAPI transforme une API en un contrat utilisable aussi bien par des outils que par des humains. Construisez-la sur des bases solides de conception REST, faites-la évoluer avec prudence via le versionnage d’API et alignez-la sur le guide HTTP. Ensuite, décrivez l’un de vos endpoints existants et générez un client à partir de celui-ci.

Réutilisation des schémas

Définissez un modèle une seule fois et référencez-le. Dupliquer des schémas inline garantit qu'ils finiront par diverger.

À privilégier
components:
  schemas:
    Post:
      type: object
      properties:
        id: { type: string }

# used by many operations
schema:
  $ref: "#/components/schemas/Post"
À éviter
# the same shape copied
# into every operation,
# slowly drifting apart

Maintenir la documentation à jour

Générez la documentation à partir de la spécification, ou générez la spécification à partir de code typé. La documentation écrite à la main devient toujours obsolète.

À privilégier
# spec is the source of truth
npx @redocly/cli preview-docs openapi.yaml
npx openapi-generator-cli generate \
  -i openapi.yaml -g typescript-fetch
À éviter
# manually maintained docs
# in a wiki, updated by hand,
# usually out of date

Compromis

La spécification vaut-elle la peine d'être maintenue ?

OpenAPI est rentable quand la spécification est générée ou imposée, et devient un fardeau quand c'est un document séparé que personne ne met à jour.

Strengths

  • Un contrat pour tout

    Documentation, clients, mocks et validation lisent le même fichier, donc ils ne peuvent pas diverger les uns des autres.

  • Meilleure collaboration

    Une spécification partagée et relisible permet au frontend, au backend et aux partenaires de s'accorder sur l'interface avant d'écrire du code.

  • Vérifiable par machine

    Les linters et les tests de contrat détectent les changements cassants et les incohérences en CI plutôt qu'en production.

Trade-offs

  • Un artefact de plus à garder exact

    Une spécification écrite à la main dérive de l'implémentation. Si elle n'est ni générée ni testée, elle devient fausse sans bruit.

  • Verbeux pour les API simples

    Les descriptions YAML et l'indirection $ref ajoutent une charge qu'une petite API interne ne rentabilisera peut-être jamais.

  • La génération de code peut être rigide

    Les clients générés sont pratiques jusqu'à ce que vous ayez besoin d'un comportement personnalisé, et une régénération peut produire de gros diffs.

FAQ

Foire aux questions

Keep learning

Related topics from the roadmap.

$ commencer à apprendre

Prêt à apprendre OpenAPI / Swagger ?

Notre tutoriel interactif vous guide à travers OpenAPI / Swagger pas à pas — avec des quiz et du vrai code que vous pouvez exécuter dans le navigateur.