OpenAPI : linter, formater et structurer une API maintenable

OpenAPI : linter, formater et structurer une API maintenable

operationId, tags, responses d'erreur : les règles qui évitent la dette sur vos specs OpenAPI.

09.08.2026
10 min de lecture
Partager cet article:
openapi
lint
format
api-design
REST
Tutoriel

Pourquoi linter et formater une spec OpenAPI avant de merger ?

Une spec peut passer la validation schéma tout en partant sans operationId, sans tags ou avec seulement une réponse default — et cette dette technique se manifeste des semaines plus tard quand les générateurs SDK, portails API ou tests de contrat échouent silencieusement. Le formatage seul ne comble pas ces lacunes ; le lint détecte des règles de style et de complétude que les validateurs ignorent. Le linter OpenAPI en ligne de FastMinify applique un sous-ensemble Spectral fixe sur les opérations de paths, entièrement dans le navigateur. Associez-le au formateur OpenAPI pour des diffs PR lisibles et au validateur OpenAPI pour la conformité schéma. Commencez par notre guide de validation OpenAPI si des erreurs structurelles vous bloquent, puis explorez le hub outils API.

Détection des operationId, tags et réponses 2xx manquants avant génération SDK ou portail
Sous-ensemble Spectral : info-contact, paths-kebab-case, operation-description, et plus
Format JSON ou YAML pour des diffs PR stables — tri récursif des clés en option
100 % local — les specs ne quittent pas le navigateur (idéal pour des contrats internes)
Chaîne recommandée : valider → formater → linter → commit

Limites honnêtes et design d'API maintenable

Ce que lint-openapi ne fait pas

Un statut lint passed signifie aucune issue dans le sous-ensemble v1 — pas que votre API est prête pour la production ou entièrement documentée.

Pas de test de sécurité (flux auth, enforcement des scopes)
Pas de test de contrat runtime sur endpoints live
Pas de bundle multi-fichiers automatique — un collage autonome par exécution
Pas de support Swagger 2.0 — OpenAPI 3.x uniquement
Les warnings ne bloquent pas un statut « passed with warnings » — traitez-les comme bloqueurs de merge si votre politique l'exige
operationId, tags et réponses d'erreur

Ces champs évitent une dette de spec que les validateurs manquent mais que générateurs et portails exigent.

operationId : stable, unique, camelCase — évitez les renommages sans plan de dépréciation
tags : regroupement par domaine ou bounded context — aligné avec les sections du portail dev
Réponses 2xx : le lint impose la présence — ajoutez des 400/401/404/500 explicites avec schémas où les clients en ont besoin
info.description et info.contact : le lint warn si absents — remplissez pour les APIs externes
Nommage des paths : préférez /pet-orders à /petOrders — règle kebab-case alignée REST
Quand passer à la tooling CI

Les outils navigateur accélèrent le feedback ; les pipelines imposent la politique org.

Rulesets Spectral personnalisés (nommage, en-têtes sécurité, pagination)
Détection de breaking changes entre versions de spec
Bundle multi-fichiers avec résolution $ref externes
Validation d'import spécifique gateway (AWS API Gateway, plugins Kong)
Documentez la version OpenAPI cible (3.0 vs 3.1 JSON Schema draft) dans le README du repo

Design-first : valider, formater, puis linter

Trois outils, trois intentions

Ne permutez pas les étapes en revue — chaque outil répond à une question différente sur votre fichier OpenAPI.

Validate (validate-openapi) : conformité schéma OpenAPI 3.x via Scalar — verdict valide/invalide
Format (format-openapi) : indentation et lisibilité — ne corrige pas les écarts sémantiques ou de style
Lint (lint-openapi) : règles Spectral sur les opérations de paths — warnings et erreurs distincts de la validation schéma
Ordre recommandé : valider → formater → linter avant merge
La syntaxe JSON seule ne suffit pas — voir le guide validation pour schéma vs lint
Règles de lint en v1 (sous-ensemble Spectral)

Le lint FastMinify n'est pas Spectral complet — il livre un jeu de règles fixe centré sur des opérations de paths maintenables (ADR-OAS-009).

not-openapi (erreur) : la racine doit être OpenAPI 3.x avec un objet info — porte d'entrée avant les autres règles
info-contact (warning) : info.contact devrait être présent
info-description (warning) : info.description non vide
paths-kebab-case (warning) : segments de path en kebab-case ou vN
operation-operationId (warning) : chaque opération a un operationId non vide
operation-tags (warning) : au moins un tag par opération
operation-description (warning) : summary ou description requis
operation-success-response (erreur) : au moins une réponse 2xx — default seul ne suffit pas
path-item-ref (warning) : $ref de path item non développée en lint v1
Ce que le lint ne couvre pas (v1)

Périmètre honnête — ne présumez pas de la parité avec Spectral, Redocly ou les moteurs de politique gateway.

Opérations de paths uniquement — webhooks et callbacks hors périmètre v1
Pas d'upload de ruleset personnalisé — sous-ensemble fixe, pas un runner Spectral
Le lint ne remplace pas la validation schéma — utilisez validate-openapi pour Scalar
Pas de fetch d'URL $ref externes — collez une spec autonome
Limite d'entrée 512 KiB — les specs très volumineuses relèvent de la CI
Formater pour la revue, pas pour la sémantique

Le formateur pretty-print en JSON ou YAML (indentation 2 ou 4 espaces) et peut trier les clés récursivement pour des diffs stables.

JSON in → JSON out ; YAML in → YAML out — le type d'entrée est préservé
Les commentaires YAML disparaissent au formatage — sauvegardez avant de reformater une spec annotée
openapi: 3.0 numérique en YAML normalisé en chaîne 3.0.0
Tri des clés utile en PR — pas un réordonnancement OpenAPI-aware des sections
OpenAPI invalide peut quand même être formaté si le parse réussit — re-validez après des edits lourds

Linter et formater OpenAPI : workflow pas à pas

Utiliser le linter OpenAPI

Le linter OpenAPI parse JSON ou YAML (max 512 KiB), vérifie la porte not-openapi, puis exécute les règles sur les opérations. Statut : passed, passed with warnings ou failed — jamais un vert simple quand des warnings existent.

Lint debounced en direct dans l'éditeur Monaco
Liste d'issues avec code de règle, niveau et chemin JSON Pointer
Panneau résultats : compteurs erreur/warning et stats paths/opérations
Erreurs de parse avec numéro de ligne quand connu
Documents Swagger 2.0 échouent sur not-openapi — migrez vers OpenAPI 3 d'abord
Utiliser le formateur OpenAPI

Le formateur OpenAPI pretty-print pour une revue humaine. Auto-format au collage ; bouton Format (⌘↵) après édition manuelle.

Indentation 2 ou 4 espaces — convention d'équipe
Tri récursif des clés en option pour des diffs git stables
Panneau de sortie surligné Shiki
Enchaîner format → validate → lint pour un passage complet pré-merge
Associer au <a href="/fr/json-validator" class="text-primary hover:underline">validateur JSON</a> si la syntaxe brute est douteuse
Scénario — Génération SDK bloquée par operationId manquant

Votre pipeline mobile génère un client depuis la spec — les warnings ignorés deviennent des échecs en aval.

1

Étape 1 : Valider la conformité schéma

Collez dans validate-openapi. Corrigez d'abord les erreurs Scalar — le lint n'aide pas sur une spec structurellement invalide.

2

Étape 2 : Linter les opérations de paths

Ouvrez lint-openapi. Résolvez les warnings operation-operationId et operation-tags sur chaque endpoint public.

3

Étape 3 : Formater et ouvrir la PR

Passez la spec corrigée dans format-openapi avec tri des clés si l'équipe l'utilise. Re-lintez avant commit.

Scénario — Diff YAML illisible en revue de contrat

Un designer exporte du YAML minifié — les reviewers ne voient pas les renommages de paths accidentels.

1

Étape 1 : Formater pour la lisibilité

Collez dans format-openapi, indentation 2 espaces, tri des clés si l'équipe est d'accord.

2

Étape 2 : Valider puis linter

Validez avec Scalar, puis lintez pour paths-kebab-case et operation-success-response sur les nouveaux endpoints.

3

Étape 3 : Documenter les réponses d'erreur

Le lint impose la présence 2xx — ajoutez manuellement des 4xx/5xx avec descriptions pour des contrats production (hors erreurs lint v1).

Workflow revue PR : du design-first au merge

Checklist pré-merge recommandée

Traitez le trio navigateur comme porte rapide avant git push — la CI reste la source de vérité d'équipe, mais détecter localement économise des minutes de pipeline. Ordre : (1) validate-openapi — corriger les erreurs Scalar ; (2) format-openapi — diff lisible ; (3) lint-openapi — résoudre les erreurs, puis les warnings selon la politique d'équipe ; (4) commit.

Points d'attention du reviewer

Au-delà du validate vert, demandez : les operationId sont-ils uniques et stables pour le codegen ? Les tags correspondent-ils à la navigation du portail API ? Chaque opération documente-t-elle au moins une réponse succès — et les formes d'erreur courantes pour les équipes client ?

Compléter avec la CI et les outils voisins

En CI, les équipes exécutent souvent Spectral, openapi-cli ou Redocly avec des rulesets plus stricts que FastMinify v1. Combinez le lint navigateur avec notre guide CI/CD. Pour les pivots de schéma : json-schema-to-openapi et openapi-to-json-schema sur le hub. Pour valider des payloads contre un schéma une fois le contrat sain : json-schema-validator (article dédié à venir).

Conclusion

Des specs OpenAPI maintenables exigent plus que la validation schéma : le lint attrape les lacunes operationId, tags et responses qui bloquent les générateurs, et le formatage garde les PR reviewables. Validez d'abord, formatez pour les humains, lintez pour le style — le tout localement avant la CI. Explorez le hub API pour la conversion JSON Schema et la validation SDL GraphQL quand votre travail de contrat dépasse le REST.

Lintez et formatez votre spec OpenAPI maintenant

Enchaînez valider → formater → linter avant chaque PR de spec
Traitez les warnings lint comme bloqueurs de merge si la génération SDK est en jeu
Activez le tri des clés seulement si toute l'équipe est d'accord — cela change la sémantique des diffs
Relisez le guide validation quand des erreurs Scalar apparaissent avant de déboguer le lint
Passez à Spectral/Redocly en CI pour des règles org au-delà du sous-ensemble v1
Partager cet article
Partager cet article: