DEV Community

Cover image for Pourquoi vos documentations Swagger et collections Postman se désynchronisent (et comment y remédier)
Antoine Laurent
Antoine Laurent

Posted on • Originally published at apidog.com

Pourquoi vos documentations Swagger et collections Postman se désynchronisent (et comment y remédier)

La dérive Swagger/Postman n’est pas un problème de discipline. Elle apparaît dès que le même contrat d’API vit dans deux artefacts indépendants : une spécification OpenAPI pour la documentation et une collection Postman pour les tests. Dès qu’un endpoint est modifié dans l’un sans être synchronisé dans l’autre, vos tests et votre documentation décrivent deux API différentes. Voici comment identifier cette dérive, la réduire, puis passer à un modèle où OpenAPI devient la source unique de vérité. Pour un tutoriel dédié à la génération de tests depuis une spécification, consultez le guide sur la génération de tests OpenAPI.

Essayez Apidog aujourd’hui

💡 Les équipes utilisant Apidog traitent le fichier OpenAPI comme l’artefact unique qui pilote la documentation, les mocks et les tests. La solution structurelle n’est pas d’ajouter plus de revues manuelles, mais de supprimer le deuxième artefact susceptible de dériver.

Pourquoi deux fichiers divergent toujours

Dans beaucoup d’équipes, le workflow ressemble à ceci :

  1. Le fichier openapi.yaml est versionné dans Git.
  2. Swagger UI affiche la documentation à partir de ce YAML.
  3. Une collection Postman est exportée ou maintenue séparément pour les tests.
  4. Les développeurs et QA modifient la collection quand ils doivent tester rapidement un cas.

Le problème : ces deux objets décrivent le même contrat, mais aucun mécanisme ne garantit leur cohérence.

Exemple courant :

  • Le backend ajoute POST /payments/refund.
  • Le champ reason devient obligatoire.
  • Le test Postman est mis à jour immédiatement.
  • Le fichier openapi.yaml reste inchangé pendant plusieurs jours.
  • Un développeur frontend lit Swagger UI, appelle l’endpoint sans reason, puis reçoit un 400 non documenté.

Ce n’est pas une erreur individuelle. C’est une conséquence directe de la double maintenance.

Artefact Qui le met à jour Déclencheur de mise à jour Validation
openapi.yaml Concepteur d’API / lead technique Sprint de documentation ou PR API Linter facultatif, par exemple Spectral
Collection Postman QA / développeur backend Besoin de test manuel ou automatisé Revue manuelle ou aucune
Swagger UI Générée depuis le YAML Mise à jour du YAML Reflète le YAML, pas forcément l’implémentation

Même avec un linter comme Spectral, vous ne détectez que les erreurs internes à la spécification. Vous ne détectez pas qu’une collection Postman envoie un payload différent.

Le problème des trois copies

La situation devient plus fragile lorsque vous ajoutez une plateforme de documentation ou un wiki interne.

Vous obtenez alors trois copies du même contrat :

  1. Le fichier openapi.yaml dans Git.
  2. La collection Postman dans un workspace.
  3. La documentation rendue dans Swagger UI, Stoplight ou un wiki.

La spécification OpenAPI est un format de description. Elle ne synchronise rien en temps réel. Vous pouvez décrire une API en YAML pendant que votre collection Postman teste autre chose.

Plus l’équipe grandit, plus le coût augmente :

  • plus de services ;
  • plus de propriétaires d’endpoints ;
  • plus de collections partagées ;
  • plus de documentation générée ;
  • plus de risques de divergence silencieuse.

Comment la dérive casse les tests sans bruit

La dérive Swagger/Postman est dangereuse parce que les tests peuvent continuer à passer tout en validant le mauvais contrat.

Voici une évolution de spécification :

# openapi.yaml - spécification mise à jour (v2)
paths:
  /payments/refund:
    post:
      summary: Initiate a refund
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - transaction_id
                - reason          # Nouveau champ obligatoire en v2
              properties:
                transaction_id:
                  type: string
                  example: "txn_8x9Ka21"
                reason:
                  type: string
                  enum: [duplicate, fraudulent, requested_by_customer]
                  example: "requested_by_customer"
      responses:
        '200':
          description: Refund initiated
          content:
            application/json:
              schema:
                type: object
                properties:
                  refund_id:
                    type: string
                  status:
                    type: string
Enter fullscreen mode Exit fullscreen mode

Une ancienne collection Postman v1 peut encore envoyer :

{
  "transaction_id": "txn_8x9Ka21"
}
Enter fullscreen mode Exit fullscreen mode

Si le backend accepte temporairement l’absence de reason pendant une migration, le test passe. Pourtant, la spécification dit que reason est obligatoire.

Résultat :

  • le test est vert ;
  • la documentation indique un contrat différent ;
  • une intégration frontend peut casser en staging ou en production.

Un validateur OpenAPI peut détecter les incohérences dans le YAML. Il ne détectera pas automatiquement qu’une collection Postman obsolète envoie un ancien payload.

Ce que signifie vraiment le test piloté par OpenAPI

Le test piloté par OpenAPI signifie que la spécification est la source d’autorité.

Les tests ne sont pas écrits en parallèle. Ils sont dérivés de la spécification.

Un workflow sain ressemble à ceci :

  1. openapi.yaml est stocké dans Git.
  2. Les changements passent par une Pull Request.
  3. La documentation, les mocks et les tests sont générés ou synchronisés depuis ce fichier.
  4. La CI exécute les tests contre cette même source.
  5. Aucune collection parallèle ne devient le contrat réel.

Ce n’est pas équivalent à “importer Swagger dans Postman”.

L’import dans Postman est une copie ponctuelle. Après l’import :

  • la collection vit sa propre vie ;
  • le YAML vit sa propre vie ;
  • toute modification future nécessite une nouvelle synchronisation manuelle.

Vous avez réinitialisé la dérive, mais vous ne l’avez pas supprimée.

Workflow spec-first OpenAPI

Le modèle de développement d’API spec-first décrit cette approche à l’échelle du cycle de vie API. Ici, l’objectif est plus ciblé : éviter que la documentation et les tests ne deviennent deux contrats concurrents.

Utiliser Apidog comme couche d’exécution au-dessus d’une spécification unique

Dans un workflow spec-first, Git reste la source de vérité. Apidog sert de couche d’exécution au-dessus de cette source.

Le principe :

  1. Vous maintenez openapi.yaml dans Git.
  2. Apidog lit cette spécification.
  3. La documentation interactive est dérivée du fichier.
  4. Le serveur de mocks est dérivé du fichier.
  5. Les tests sont dérivés du fichier.

Le mode “Spec-First” d’Apidog, actuellement en bêta, est conçu pour ce type de workflow. Au lieu de maintenir une collection Postman séparée, vous pointez Apidog vers la spécification OpenAPI. Les artefacts en aval restent alignés sur cette source.

Le bénéfice opérationnel est simple : il n’y a plus de collection Postman pouvant dériver du YAML.

Le workflow de synchronisation des spécifications OpenAPI détaille comment connecter GitHub et Apidog pour garder les artefacts alignés.

Avant de migrer une suite critique, testez notamment :

  • la génération des scénarios à partir de vos schémas réels ;
  • la gestion des jeux de données ;
  • les permissions d’accès aux rapports ;
  • l’intégration avec votre CI ;
  • la capacité à couvrir vos cas de régression existants.

Les mocks sont également importants. Si vos mocks, vos tests et votre documentation viennent de la même spécification, un développeur frontend reçoit une réponse cohérente avec ce que les tests valident. Pour approfondir ce point, consultez les cas d’utilisation de la simulation d’API.

Chemin de migration depuis Swagger + Postman

Vous n’avez pas besoin de migrer en une seule fois. Une migration progressive fonctionne mieux.

1. Auditer la couverture actuelle

Comparez votre collection Postman et votre openapi.yaml.

Listez :

  • les endpoints présents dans Postman mais absents du YAML ;
  • les endpoints présents dans le YAML mais non testés ;
  • les paramètres manquants ;
  • les headers divergents ;
  • les schémas de réponse différents ;
  • les codes HTTP documentés mais non testés.

Exemple de checklist :

[ ] Tous les endpoints Postman existent dans openapi.yaml
[ ] Tous les endpoints OpenAPI critiques ont au moins un test
[ ] Les champs required sont identiques
[ ] Les enums sont identiques
[ ] Les codes 2xx, 4xx et 5xx importants sont documentés
[ ] Les headers d’authentification sont cohérents
Enter fullscreen mode Exit fullscreen mode

2. Réconcilier la spécification

Avant de générer des tests, la spécification doit décrire l’API réelle.

Ne partez pas d’un YAML obsolète. Corrigez d’abord :

  • les chemins ;
  • les méthodes HTTP ;
  • les paramètres ;
  • les schémas de requête ;
  • les schémas de réponse ;
  • les règles d’authentification ;
  • les erreurs attendues.

3. Importer la spécification dans Apidog

Une fois la spécification nettoyée, importez-la dans Apidog pour générer une première base de tests, de mocks et de documentation.

L’objectif n’est pas forcément de remplacer tous les tests dès le premier jour. Commencez par les endpoints les plus stables ou les plus critiques.

4. Exécuter en parallèle pendant un sprint

Pendant une courte période, exécutez :

  • l’ancienne collection Postman ;
  • les tests dérivés de la spécification.

Comparez les résultats :

  • quels tests Postman couvrent des cas absents de la spécification ?
  • quels tests générés révèlent des écarts ignorés ?
  • quels endpoints ne devraient plus être dans la collection ?

5. Archiver la collection Postman comme source de vérité

Lorsque les tests spec-first couvrent les régressions principales, archivez la collection Postman ou limitez-la aux tests exploratoires.

La règle importante : la collection ne doit plus être considérée comme le contrat API.

Pour générer une collection de tests initiale depuis votre spécification, consultez le guide sur la génération de collections de tests à partir de spécifications OpenAPI.

Comparaison : double maintenance vs spécification comme source

Dimension Swagger + Postman OpenAPI comme source unique
Risque de dérive Élevé : deux artefacts modifiés séparément Faible : un artefact, sorties dérivées
Couverture des tests Dépend de la synchronisation manuelle Suit les changements de spécification
Onboarding Deux outils à comprendre et aligner Une spécification à comprendre
CI/CD Collection à exporter et versionner séparément Spécification dans Git
Cohérence des mocks Mock maintenu ou importé séparément Mock dérivé de la même spécification
Changement de schéma Modifier YAML + collection + mock Modifier la spécification
Documentation Peut diverger des tests Générée depuis la même source

Le problème n’est pas Postman en tant qu’outil. Postman reste utile pour les tests exploratoires, les appels manuels et certains workflows basés sur des collections.

Le problème apparaît lorsque la collection devient un contrat parallèle au lieu d’être un artefact dérivé ou temporaire.

Exemple de règle CI simple

Même sans migration complète, vous pouvez commencer par valider la spécification à chaque Pull Request.

Exemple avec Spectral :

name: Validate OpenAPI spec

on:
  pull_request:
    paths:
      - "openapi.yaml"

jobs:
  spectral:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Spectral
        run: npm install -g @stoplight/spectral-cli

      - name: Lint OpenAPI
        run: spectral lint openapi.yaml
Enter fullscreen mode Exit fullscreen mode

Cette étape ne résout pas la dérive Postman, mais elle garantit au moins que la spécification canonique reste valide.

Ensuite, vous pouvez ajouter une étape qui exécute les tests dérivés de cette même spécification, au lieu d’exécuter une collection maintenue séparément.

FAQ

Pourquoi l’importation de Swagger dans Postman ne résout-elle pas la dérive ?

Parce que l’importation crée une copie à un instant T. Après l’import, la collection et le fichier openapi.yaml deviennent indépendants. Toute modification future de la spécification nécessite une nouvelle importation ou une mise à jour manuelle.

Puis-je continuer à utiliser Postman pour les tests exploratoires ?

Oui. Le modèle spec-first n’interdit pas les appels ad hoc. Vous pouvez garder Postman pour explorer une API, reproduire un bug ou tester rapidement une hypothèse.

La règle : ne traitez pas cette collection exploratoire comme la source de vérité du contrat API.

Comment détecter une dérive entre la spécification et l’implémentation réelle ?

Utilisez des tests de contrat. Votre API doit être validée contre la spécification OpenAPI pendant les tests.

Spectral vérifie la cohérence interne du YAML. Pour détecter une dérive entre l’implémentation et la spécification, il faut exécuter des requêtes réelles et valider les requêtes/réponses contre OpenAPI.

Apidog remplace-t-il entièrement Postman ?

Cela dépend du workflow. Apidog couvre la conception, la documentation, les mocks et les tests dans un même espace de travail. Pour les équipes qui utilisent Postman principalement pour les suites de régression et les tests de contrat, Apidog peut couvrir ce besoin.

Si votre équipe utilise fortement le runner Postman, des scripts avancés ou des collections existantes en CI, vous pouvez conserver le test avec Postman pendant une phase de transition.

Que faire si mon fichier openapi.yaml est déjà obsolète ?

Commencez par le réconcilier avec l’API réelle. Il n’y a pas de raccourci fiable.

Procédez endpoint par endpoint :

  1. Appelez l’API réelle.
  2. Comparez avec le YAML.
  3. Corrigez les paramètres, schémas et réponses.
  4. Validez la spécification.
  5. Utilisez ensuite cette spécification comme source canonique.

Conclusion

Swagger et Postman dérivent parce qu’ils maintiennent deux descriptions séparées du même contrat API. Ajouter plus de revues manuelles réduit temporairement le risque, mais ne supprime pas la cause.

Le modèle plus robuste consiste à garder un seul artefact canonique : une spécification OpenAPI versionnée dans Git. Les tests, les mocks et la documentation doivent être dérivés de cette source, pas maintenus en parallèle.

Téléchargez Apidog et importez votre spécification OpenAPI existante pour vérifier comment un seul fichier peut alimenter la documentation, les mocks et les tests. Si vous évaluez le mode “Spec-First”, consultez la page du mode “Spec-First” d’Apidog pour connaître les fonctionnalités disponibles et les conditions d’accès.

Top comments (0)