Concevoir d’abord la spec et la simuler
Importez ou concevez une spec OpenAPI, lintez-la, servez-en un mock, envoyez des requêtes au mock et vérifiez les vraies réponses par rapport à la spec.
Spec-first signifie que le document OpenAPI vient avant le code : on s’accorde sur l’API, on l’essaie avec un mock, puis on vérifie le vrai serveur par rapport au même document une fois qu’il existe. Dans ce tutoriel, vous ajoutez la spec de la boutique Alpenglow à un espace de travail, vous concevez un endpoint que la boutique n’a pas encore, vous servez les deux depuis un mock sur votre Mac et vous vérifiez les réponses de la vraie API par rapport à la spec.
- Durée : 20 minutes.
- Il vous faut : Echolot et un espace de travail, comme celui de Votre premier espace de travail ou un nouvel espace vide.
- Vous apprenez : la page Specs, le lint, les requêtes qui suivent une spec, les mocks et la vérification Spec OpenAPI.
1. Ajouter la spec
La boutique de démo publie sa spec à l’adresse https://demo.echolot.dev/openapi.yaml.
-
Enregistrez-la sur votre Mac. Dans Terminal :
curl -o ~/Downloads/openapi.yaml https://demo.echolot.dev/openapi.yamlOu ouvrez l’adresse dans Safari et choisissez Fichier › Enregistrer sous….
-
Dans la fenêtre de l’espace de travail, passez sur Specs (⌘3).
-
Choisissez Ajouter un fichier de spec… (sur la page vide, ou dans le menu + de la barre latérale) et sélectionnez
openapi.yaml. Une copie va dans le dossierspecsde l’espace de travail.
La spec s’ouvre dans l’éditeur Visuel : ses serveurs, ses endpoints regroupés par chemin ou par tag, et ses schémas. Le sélecteur de la barre d’outils permet de passer de Visuel à Code. Les deux modifient le même texte, et c’est le texte qui est enregistré.
Partir de zéro
Choisissez plutôt Nouvelle spec. Vous obtenez un document OpenAPI 3.1 intitulé Nouvelle API avec un endpoint,
GET /items, à renommer et à enrichir. Le reste de ce tutoriel se déroule de la même façon.
2. Concevoir un endpoint que la boutique n’a pas
La boutique veut une liste de ses magasins. Concevez-la avant que quiconque l’écrive.
-
Dans l’éditeur Visuel, choisissez Ajouter un endpoint.
-
Dans Nouvel endpoint, laissez Méthode sur GET, saisissez le chemin
/stores, le résuméList storeset le tagCatalog. Cliquez sur Ajouter un endpoint. Echolot ajoute l’opération avec une réponse200comme point de départ. -
Dans l’éditeur de l’endpoint, définissez ID de l’opération sur
listStores. -
Choisissez Afficher dans le code. Remplacez les
responsesde l’endpoint par un corps et un exemple :responses: '200': description: The shop's stores. content: application/json: schema: type: array items: type: object required: [id, city] properties: id: { type: string } city: { type: string } address: { type: string } example: - { id: zrh, city: Zürich, address: Bahnhofstrasse 1 } - { id: brn, city: Bern, address: Spitalgasse 4 }
Les modifications sont enregistrées au fur et à mesure, et ⌘Z les annule. Les modifications visuelles ne changent que les lignes de l’entrée que vous touchez, si bien que le reste du fichier, commentaires compris, reste tel que vous l’avez écrit. Plus de détails dans modifier des specs.

3. Linter la spec
Le bouton des problèmes de la barre d’outils affiche une coche verte et Aucun problème, ou un nombre d’erreurs et d’avertissements.
- Cliquez dessus. La fenêtre Problèmes indique que le document respecte la spécification OpenAPI et que chaque référence se résout.
- Cassez quelque chose pour voir un problème : dans Code, changez
$ref: '#/components/schemas/Product'sur une ligne en'#/components/schemas/Produkt'. Le bouton devient rouge. Cliquez dessus et choisissez le problème : l’éditeur saute à sa ligne. - Annulez la modification (⌘Z).
Le même lint s’exécute en CI avec l’outil en ligne de commande. --strict échoue aussi sur les avertissements, et
--hints ajoute des conseils comme les ID d’opération manquants :
echolot spec lint specs/openapi.yaml --strict4. Créer des requêtes qui suivent la spec
- Dans la barre d’outils Specs, choisissez Générer les requêtes. Un dossier Alpenglow demo shop apparaît sous Requêtes, avec un dossier par tag (Catalog, Auth, Orders) et une requête pour chaque endpoint, List stores compris.
- Regardez Catalog › List products. Son URL est
{{baseUrl}}/products. Son onglet Tests a déjà deux vérifications issues de la spec : État est égal à200, et un JSON Schema du corps documenté.
Le dossier suit la spec. Quand la spec changera plus tard, le menu Requêtes de la barre d’outils Specs propose Vérifier les changements de « Alpenglow demo shop »… : il liste ce qui est nouveau, modifié et disparu dans la spec et l’applique sans écraser vos propres modifications des requêtes. Voir synchronisation OpenAPI.
Les requêtes générées commencent par {{baseUrl}} (rl en minuscules). Vous lui donnez une valeur dans les deux étapes
suivantes.
5. Servir un mock de la spec
- Passez sur Mocks (⌘4). Ouvrez le menu + et choisissez Mock de Alpenglow demo shop.
- Cliquez sur Démarrer (⌘R). La barre d’outils affiche un point vert et l’adresse
http://127.0.0.1:4010/v1: le premier port libre à partir de 4010, et le chemin de base du serveur de la spec. - Cliquez sur Utiliser dans un environnement. Echolot crée un environnement Mock : Alpenglow demo shop dont
{{baseUrl}}est l’adresse du mock, et le choisit.
La carte Réglages contient le Port du mock, Répondre aux autres appareils du réseau, un Délai avant chaque réponse, une part d’Échecs (des 500 injectés) et des Vérifications : Refuser les requêtes qui ne respectent pas la spec (400 avec les raisons). Le mock tourne tant que la fenêtre est ouverte.

6. Envoyer des requêtes au mock
- De retour dans Requêtes, envoyez Catalog › List stores. Le mock répond
200avec les deux magasins de votre exemple. L’onglet En-têtes montreServer: Echolot mock. - Envoyez Catalog › List products. Le mock n’a pas d’exemple pour elle, il fabrique donc un corps à partir du schéma : la bonne forme avec des valeurs fictives. Les deux vérifications de la requête réussissent.
- Dans les Paramètres de List products, ajoutez
sortavec la valeurcheapestet envoyez. Le mock la refuse :400avecquery “sort”: not one of the allowed values. La spec autorisename,price,-priceetrating. Retirez le paramètre. - Dans Get a product, ajoutez l’en-tête
Prefer: code=404et envoyez. Le mock répond avec le problème404documenté à la place. Retirez l’en-tête.
Le JOURNAL de la page Mocks liste chaque requête à laquelle le mock a répondu, avec l’opération qui correspondait et l’éventuel problème. Dans la carte Réponses, vous pouvez faire répondre une opération avec un autre état ou exemple documenté pour chaque requête. Les routes JavaScript pour les réponses qui ont besoin d’un état se trouvent dans routes scriptées.
7. Vérifier la vraie API par rapport à la spec
- Sur la page Environnements, ajoutez un environnement
Demoavec une variablebaseUrldéfinie surhttps://demo.echolot.dev/v1, et choisissez-le dans l’en-tête de page. - Ouvrez List products, ouvrez Ajouter un test dans son onglet Tests et choisissez Spec OpenAPI. Il n’y a rien à renseigner : elle vérifie le corps par rapport au schéma que la spec documente pour l’état qui est revenu.
- Envoyez-la. Les trois vérifications réussissent : la vraie boutique correspond à sa spec.
- Envoyez List stores. La vraie boutique répond
404: l’endpoint n’existe que dans la spec. C’est tout l’intérêt de spec-first : le mock vous permet de construire dessus dès maintenant.
Pour exécuter les mêmes vérifications en CI, exécutez le dossier avec echolot run et servez-y le mock
avec echolot mock :
echolot mock specs/openapi.yaml --port 4010Étapes suivantes
- Specs à partir du trafic : écrivez une spec à partir de requêtes que vous envoyez déjà.
- Mocks : exemples enregistrés depuis l’historique, délais, échecs et partage sur le réseau.
echolot spec:checkfait échouer la CI quand un dossier est en retard sur sa spec.
Tester une API et l’exécuter en CI
Ajoutez des vérifications aux requêtes, exécutez-les dans l’Exécution, puis lancez le même espace de travail avec l’outil en ligne de commande dans GitHub Actions avec un rapport JUnit.
Automatiser avec un flux
Construisez sur le canevas un flux qui se connecte, liste les commandes, décide et vous notifie ; exécutez-le, planifiez-le et démarrez-le depuis un webhook.

