Retour au catalogue
Season 8 19 Épisodes 1h 10m 2026

OpenAPI and Swagger Ecosystem

Édition 2026. Un guide complet pour 2026 afin de maîtriser la spécification OpenAPI v3.1 et la chaîne d'outils open-source Swagger. Apprenez à concevoir, documenter et automatiser vos API REST en utilisant l'approche définitive design-first.

Conception d'API Validation des données
OpenAPI and Swagger Ecosystem
Lecture en cours
Click play to start
0:00
0:00
1
Le contrat d'API
Une introduction à la spécification OpenAPI et à la chaîne d'outils Swagger. Découvrez pourquoi les API ont besoin d'un format de description standard et comment cela permet le développement design-first.
3m 48s
2
L'écosystème Swagger
Une cartographie de haut niveau des outils open-source construits autour de la spécification OpenAPI. Nous explorons les rôles de Swagger Editor, Swagger UI et Swagger Codegen.
3m 42s
3
Anatomie d'un document OpenAPI
Comprendre les fondations structurelles d'un document OpenAPI 3.1. Nous couvrons les formats pris en charge, le versioning et l'interopérabilité structurelle.
3m 17s
4
Préparer le terrain : Info et Servers
Définir les métadonnées et les environnements pour votre API. Nous explorons l'objet Info et l'objet Server pour fournir un contexte essentiel aux consommateurs de l'API.
3m 24s
5
Cartographier l'API : Paths et Operations
Créer le plan de votre API. Apprenez à définir des routes à l'aide de l'objet Paths et à spécifier des méthodes HTTP avec l'objet Operation.
3m 50s
6
Endpoints dynamiques avec Parameters
Rendre vos endpoints dynamiques en utilisant le path templating et l'objet Parameter. Nous couvrons les paramètres de path, query, header et cookie.
3m 54s
7
Structurer les entrées : Request Bodies
Gérer des payloads de données complexes. Plongez dans l'objet Request Body et apprenez à gérer la négociation de contenu via les Media Types.
3m 28s
8
Attentes et erreurs : Responses
Définir les résultats d'un appel d'API à l'aide de l'objet Responses. Nous explorons le mappage des codes d'état HTTP vers des structures de réponse spécifiques et la solution de repli de la réponse par défaut.
3m 45s
9
Réutilisabilité avec Components
Garder votre spécification DRY (Don't Repeat Yourself). Découvrez comment utiliser l'objet Components et les objets de référence ($ref) pour partager des définitions à travers votre document.
4m 07s
10
Types de données et Schemas
Appliquer des règles de données à l'aide de l'objet Schema. Nous couvrons l'intégration d'OpenAPI avec JSON Schema Draft 2020-12, les formats de données et les types primitifs.
3m 52s
11
Définir les Security Schemes
Verrouiller la porte d'entrée de votre API. Apprenez à configurer l'objet Security Scheme pour les clés d'API, l'authentification HTTP (Basic/Bearer) et OAuth2.
4m 12s
12
Appliquer les Security Requirements
Sécuriser vos opérations. Nous explorons l'objet Security Requirement et comment appliquer des règles d'authentification globalement ou par route.
3m 37s
13
API asynchrones avec Webhooks
Gérer les requêtes hors bande. Plongez dans la fonctionnalité Webhooks introduite dans OpenAPI 3.1 et comprenez en quoi elle diffère des Callbacks traditionnels.
3m 39s
14
Transitions d'état avec Links
Cartographier dynamiquement les flux de travail d'API. Nous explorons l'objet Link pour décrire les relations entre les opérations, offrant une approche pragmatique de HATEOAS.
3m 42s
15
Documentation interactive avec Swagger UI
Donner vie à votre spécification. Découvrez comment installer et servir Swagger UI pour fournir un portail de documentation visuel et interactif aux développeurs.
3m 41s
16
Personnaliser Swagger UI
Adapter l'expérience développeur. Nous nous plongeons dans la configuration de Swagger UI, la modification des options d'affichage et l'activation de fonctionnalités telles que le deep linking et la coloration syntaxique.
3m 43s
17
Concevoir avec Swagger Editor
Écrire des définitions d'API avec un retour instantané. Explorez les fonctionnalités, l'installation et les capacités de validation en temps réel du Swagger Editor classique.
3m 21s
18
Automatiser avec Swagger Codegen
Transformer les spécifications en code boilerplate. Apprenez comment Swagger Codegen v3 exploite votre document OpenAPI pour générer instantanément des stubs de serveur et des bibliothèques clientes.
3m 49s
19
Le futur : Swagger Editor Next
Adopter l'évolution de la conception d'API. Nous présentons Swagger Editor Next, son architecture et son puissant support pour OpenAPI 3.1 et la spécification AsyncAPI.
3m 43s

Épisodes

1

Le contrat d'API

3m 48s

Une introduction à la spécification OpenAPI et à la chaîne d'outils Swagger. Découvrez pourquoi les API ont besoin d'un format de description standard et comment cela permet le développement design-first.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 1 sur 19. Les API font tourner le web moderne, mais comment communiquent-elles vraiment entre elles sans passer par des essais et erreurs interminables ? Tu as besoin d'un moyen fiable de savoir exactement ce qu'un serveur attend et ce qu'il va renvoyer, avant même d'écrire une seule ligne de code. Ce mécanisme, c'est le contrat d'API, régi par l'OpenAPI Specification. L'OpenAPI Specification est une interface standardisée et agnostique du langage pour les API REST. Vois ça comme un plan d'architecture. Quand il est bien défini, un humain comme une machine peuvent regarder ce plan et comprendre exactement ce que fait un service. Ils n'ont pas besoin d'avoir accès au code source, ils n'ont pas besoin de lire une documentation PDF séparée, et ils n'ont pas besoin d'inspecter le trafic réseau en direct. La spécification décrit clairement les endpoints disponibles, les inputs précis qu'ils demandent, et la structure exacte des données qu'ils renvoient. Elle est écrite en texte brut, en utilisant soit du YAML soit du JSON, ce qui la rend universellement lisible, aussi bien par des outils automatisés que par des développeurs humains. Si tu travailles avec des API, tu as probablement déjà entendu le terme Swagger. Les gens utilisent souvent Swagger et OpenAPI de manière interchangeable, mais ils représentent des concepts totalement différents aujourd'hui. À l'origine, la spécification elle-même s'appelait Swagger. En 2015, les créateurs ont fait don de la spécification à la Linux Foundation, où elle a été officiellement renommée l'OpenAPI Specification. Aujourd'hui, OpenAPI désigne strictement les règles et le standard. Swagger désigne l'écosystème d'outils commerciaux et open-source créés par SmartBear qui implémentent ces règles. Par exemple, Swagger UI génère de la documentation interactive, et Swagger Editor t'aide à écrire les fichiers. Tu écris un document OpenAPI, mais tu peux utiliser les outils Swagger pour le visualiser. Ce qui nous amène à la véritable force de la spécification, c'est-à-dire le développement design-first. Sans un contrat clair, le développement d'API se fait généralement de manière linéaire. L'équipe backend écrit le code, expose un nouvel endpoint, puis transmet une documentation écrite. Pendant ce temps, l'équipe frontend reste à rien faire, en attendant que le backend ait terminé pour pouvoir commencer à connecter l'interface utilisateur. Et c'est là qu'est l'idée clé. Quand tu adoptes OpenAPI, tu inverses ce processus. Avant que qui que ce soit n'écrive du code applicatif, les deux équipes se mettent d'accord sur le document OpenAPI. Ce fichier texte devient un contrat strict qui élimine toute incertitude. L'équipe backend l'utilise pour générer des server stubs et valider que leur implémentation respecte les exigences convenues. Simultanément, l'équipe frontend utilise exactement le même document pour générer des mock servers. Ils peuvent immédiatement commencer à construire l'interface utilisateur, en faisant des requêtes réseau vers un backend simulé qui se comporte exactement comme le fera l'API finale. Aucune équipe ne bloque l'autre. Parce que ce contrat est lisible par une machine, il résout aussi définitivement le problème de la documentation obsolète. Quand un besoin de l'API change, tu mets d'abord à jour le fichier de spécification. Ton outillage régénère ensuite automatiquement la documentation web, les mock servers et les bibliothèques clientes. La documentation et le code restent parfaitement synchronisés parce qu'ils partagent une seule source de vérité. Une spécification d'API n'est pas juste un mécanisme pour générer de belles pages web ; c'est un protocole de communication fondamental pour tes équipes d'ingénierie, qui transforme les suppositions humaines en règles exécutables. Si tu aimes l'émission et que tu veux nous soutenir, cherche DevStoriesEU sur Patreon. Merci de ton écoute. À la prochaine !
2

L'écosystème Swagger

3m 42s

Une cartographie de haut niveau des outils open-source construits autour de la spécification OpenAPI. Nous explorons les rôles de Swagger Editor, Swagger UI et Swagger Codegen.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 2 sur 19. Rédiger de la documentation, c'est fastidieux, mais imagine si ton code écrivait les docs, et que tes docs écrivaient le code ? Ce workflow bidirectionnel, c'est la promesse fondamentale de l'écosystème open-source Swagger. On croit souvent à tort qu'il faut adopter tout l'écosystème d'un coup. Ce n'est pas le cas. L'ensemble d'outils est entièrement modulaire. Tu peux choisir des composants individuels en fonction des besoins spécifiques de ton workflow, que tu veuilles juste faire le rendu d'une documentation existante ou scaffolder un tout nouveau backend. Les principaux outils open-source fonctionnent comme un pipeline. Tu conçois l'API dans Swagger Editor, tu la visualises dans Swagger UI et tu automatises les implémentations avec Swagger Codegen. Swagger Editor, c'est là que commence le design de l'API. C'est un environnement dans le navigateur où tu écris ta spécification OpenAPI en YAML ou en JSON. Pendant que tu tapes, l'éditeur valide en continu ta syntaxe par rapport aux règles de la spécification OpenAPI. Si tu places mal un champ ou que tu définis un type de données invalide, l'éditeur signale l'erreur immédiatement. Il offre une vue split-screen en temps réel, avec le texte brut d'un côté et une preview visuelle de l'autre. Une fois que le contrat est valide, tu peux passer à l'automatisation avec Swagger Codegen. Cet outil prend ton fichier de spécification OpenAPI et le traduit en code source fonctionnel. Il supporte des dizaines de langages et de frameworks. Tu peux générer des server stubs, qui fournissent le boilerplate, le routing et les controllers pour ton backend. Tu peux aussi générer des SDK clients, que les applications consommatrices utilisent pour interagir avec ton API sans avoir à écrire de logique de requête HTTP sur mesure. Ensuite, il y a Swagger UI. Cet outil parse ta spécification et en fait le rendu sous forme de page de documentation web interactive. Ça va bien au-delà du texte statique. Swagger UI génère des champs d'input et des boutons d'exécution directement à partir de tes définitions d'API. Les utilisateurs peuvent entrer des paramètres, attacher des tokens d'authentification, envoyer de vraies requêtes HTTP vers tes endpoints d'API, et inspecter les réponses directement dans le navigateur. Prenons un workflow concret qui combine ces trois outils. Tu commences dans Swagger Editor, en rédigeant la spécification pour une nouvelle API de gestion des utilisateurs. Tu définis les endpoints, les payloads de requête et les réponses attendues. Une fois le contrat terminé, tu passes ce fichier à Swagger Codegen, en le configurant pour sortir un server stub Node.js. Codegen génère automatiquement la structure des dossiers, la configuration du package et les route handlers. Tu as juste besoin d'écrire la logique métier spécifique et les requêtes de base de données à l'intérieur de ces controllers pré-câblés. Pendant ce temps, tu donnes exactement le même fichier de spécification OpenAPI à ton équipe QA, servi via Swagger UI. Les ingénieurs QA n'ont pas besoin de lire ton fichier YAML ou de regarder ton code Node.js. Ils ouvrent la page web de Swagger UI, voient les inputs requis, et commencent immédiatement à envoyer des payloads de test à ton nouveau serveur Node.js. Voici l'idée clé. L'écosystème open-source Swagger transforme le développement d'API : au lieu d'écrire le code backend en espérant que la documentation reste exacte, tu définis d'abord un contrat strict, où la documentation orientée utilisateur et le boilerplate du serveur sont générés à partir de la même source de vérité. C'est tout pour cet épisode. Merci d'avoir écouté, et continue à développer !
3

Anatomie d'un document OpenAPI

3m 17s

Comprendre les fondations structurelles d'un document OpenAPI 3.1. Nous couvrons les formats pris en charge, le versioning et l'interopérabilité structurelle.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 3 sur 19. Avant de concevoir une API complexe, tu as besoin d'une page blanche, mais partir sur une mauvaise structure de base va casser silencieusement toute ta toolchain par la suite. Ce qui nous amène à l'anatomie d'un document OpenAPI. À la base, un document OpenAPI est strictement défini comme un objet JSON. Tu peux écrire ton fichier au format JSON ou YAML. Le tooling supporte les deux, et le modèle de données sous-jacent reste exactement le même. Comme ça mappe directement sur un objet JSON standard, les règles de formatage sont rigides. Chaque nom de champ est complètement case-sensitive. Si la spécification impose un nom de champ en minuscules, l'écrire avec une majuscule initiale signifie que le parser va l'ignorer ou throw une erreur. Quand tu organises ton projet, tu as le choix dans la structure du document. Tu peux tout définir dans un seul fichier monolithique. Alternativement, tu peux séparer tes définitions sur une structure multi-documents. Dans un setup multi-documents, un fichier racine sert d'entry point et fait le lien vers des fichiers externes en utilisant des pointeurs de référence. Que tu utilises un seul fichier ou cinquante, le parser finit par les résoudre en un seul objet JSON logique en mémoire. Prends un scénario concret. Tu démarres un tout nouveau projet. Tu crées un fichier texte vide nommé openapi point yaml. Avant d'essayer de concevoir la moindre logique, tu veux établir une baseline validée. Pour passer un schema validator, ta page blanche doit contenir exactement deux champs au niveau root. Le premier champ requis s'appelle openapi. Sa valeur est une string qui spécifie la version exacte de l'OpenAPI Specification que tu utilises, comme 3.1.0. Il est extrêmement courant de confondre ce champ avec la version de ta propre API. Ils n'ont absolument rien à voir. La string de version openapi existe strictement pour la compatibilité du tooling. Quand un code generator ou un documentation viewer ouvre ton fichier, il lit ce champ en premier pour déterminer quelles règles de parsing appliquer. Si tu indiques 3.0.0 ici mais que tu utilises des features de la 3.1.0, tes outils de validation vont fail parce qu'ils évaluent ton document avec le mauvais set de règles. Voici le point clé. Le deuxième champ root requis est l'endroit où vont les détails de ton API. Ce champ est l'objet info. L'objet info fournit les metadata pour ton application. On ne va pas détailler son contenu interne ici, à part pour dire qu'il requiert un title et sa propre string de version. Cette string de version interne dans l'objet info, c'est là que tu définis si ton application est en version un ou version deux. Une fois que ton fichier openapi point yaml contient juste ces deux champs root, openapi et info, tu as un document OpenAPI structurellement complet. Tu peux passer ce fichier dans un validator dès maintenant, et il passera sans problème. Établir cette structure valide minimale garantit que ton parser et ta toolchain fonctionnent parfaitement avant que tu introduises la complexité de la logique de routing. Merci d'avoir écouté, happy coding tout le monde !
4

Préparer le terrain : Info et Servers

3m 24s

Définir les métadonnées et les environnements pour votre API. Nous explorons l'objet Info et l'objet Server pour fournir un contexte essentiel aux consommateurs de l'API.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 4 sur 19. Si ton API est down, comment un consumer sait qui contacter ? La réponse se trouve tout en haut de ta spec. On va parler de planter le décor : Info et Servers. Avant même qu'un développeur fasse une request ou inspecte un data model, il a besoin de contexte. Les objets Info et Server fournissent exactement ça. Vois-les comme la page de garde et le carnet d'adresses de ton API. L'objet Info, c'est ton hub de métadonnées. Deux champs y sont strictement requis. D'abord le title, qui est tout simplement le nom human-readable de ton application. Ensuite, la version. On confond souvent ça avec la version de la spec OpenAPI. Ce sont deux choses complètement différentes. La version OpenAPI indique au parser quel ensemble de règles de syntaxe suivre. La version Info, c'est ton propre numéro de release d'API, un truc comme 1.0.5. Ça indique au consumer quelle itération du produit il est en train de regarder. Au-delà des champs requis, l'objet Info te permet d'ajouter du contexte. Tu peux inclure une description, qui supporte le formatage CommonMark. Ça te permet d'écrire une documentation détaillée et lisible, avec des paragraphes et des liens directement dans la spec. Tu peux aussi définir un objet contact contenant un nom, une URL et une adresse e-mail. Si quelque chose casse ou qu'un développeur a besoin d'un accès, ça lui dit exactement où aller. Enfin, l'objet license te permet de spécifier les conditions légales sous lesquelles l'API opère, en demandant un nom et, en option, une URL qui pointe vers le texte de la license. Une fois que l'objet Info a établi ce qu'est l'API, l'array Servers indique au consumer où elle se trouve. Sans ça, les consumers savent ce que fait ton API, mais pas où la trouver. Tu fournis un array d'objets Server qui représentent les différents environnements où ton API est hébergée. Chaque objet Server requiert un seul champ, qui est l'URL. Voici le point clé. Tu n'es pas limité à une seule base URL. Tu peux définir plusieurs entrées Server pour refléter ton infrastructure réelle. Par exemple, ton premier objet Server pourrait contenir ton URL de production utilisant une adresse HTTPS sécurisée, avec une description l'identifiant explicitement comme l'environnement live de production. Ton deuxième objet Server pourrait pointer vers une URL de staging ou de sandbox, avec une description précisant que c'est strictement pour les tests. Quand tu structures tes serveurs de cette façon, les outils de documentation interactive et les client generators deviennent beaucoup plus puissants. Au lieu de forcer un développeur à configurer manuellement la base URL pour chaque request, il peut juste sélectionner staging ou production depuis un menu déroulant dans son interface. Les outils vont parser ton array Servers et router automatiquement les requests vers le bon host. Tu peux aussi utiliser des URLs relatives si ton document OpenAPI est hébergé directement sur le serveur qui fournit l'API. Ça permet de déployer plus facilement exactement le même fichier de spec sur différents environnements sans mettre à jour constamment l'adresse du host. Définir des objets Info et Server précis signifie que ton API n'est pas juste une vague collection d'opérations, mais un service entièrement identifié, légalement clair et physiquement localisable. La qualité de toute intégration automatisée dépendra entièrement de l'exactitude de ces base URLs. C'est tout pour cet épisode. Merci de m'avoir écouté, et continue de builder !
5

Cartographier l'API : Paths et Operations

3m 50s

Créer le plan de votre API. Apprenez à définir des routes à l'aide de l'objet Paths et à spécifier des méthodes HTTP avec l'objet Operation.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 5 sur 19. Toute REST API a besoin d'endpoints, mais comment tu prouves mathématiquement à une machine quelles méthodes HTTP sont autorisées et où ? Tu les maps logiquement. Aujourd'hui, on regarde le mapping des Paths et des Operations de l'API. Vois le Paths Object dans OpenAPI comme le routeur central de ta documentation. Il agit comme un répertoire qui map les URLs relatives à des capacités spécifiques. Avant de regarder ce qu'il y a dedans, on doit clarifier un malentendu courant. Les paths doivent toujours commencer par un slash. Ils sont strictement relatifs à ta Server URL, jamais absolus. Si ton API est hébergée sur api point example point com, ton path est simplement slash users, pas le domaine complet. La spécification se base sur ce formatage exact pour ajouter correctement le path à l'adresse de base du serveur. À l'intérieur du Paths Object, tu définis des routes individuelles en utilisant des string keys. La valeur assignée à chaque clé de route s'appelle un Path Item Object. Un Path Item Object est fondamentalement juste un conteneur. Il regroupe toutes les méthodes HTTP autorisées sur cette URL spécifique. Il ne dicte pas directement les inputs ou les outputs. À la place, il contient des clés qui représentent les méthodes HTTP standards, comme get, post, put, ou delete. Quand tu maps une de ces méthodes HTTP à l'intérieur d'un Path Item, la valeur que tu y attaches est un Operation Object. C'est dans l'Operation Object que l'action réelle est définie. Il décrit exactement ce qu'un client peut faire quand il envoie cette méthode spécifique vers ce path exact. Pour visualiser la structure, prends un endpoint standard de gestion d'utilisateurs. Dans ton Paths Object racine, tu définis une clé appelée slash users. La valeur qui y est attachée est ton Path Item Object. À l'intérieur de ce conteneur, tu définis une clé get et une clé post. La clé get contient un Operation Object qui explique comment l'API retourne une liste d'utilisateurs. La clé post contient un Operation Object complètement séparé qui décrit comment créer un nouvel utilisateur. Les deux opérations partagent l'URL identique slash users, mais la spécification les traite comme des actions logiques distinctes, imbriquées sous leurs clés de méthode HTTP respectives. À l'intérieur de chaque Operation Object, tu vas généralement définir deux champs pour établir l'identité : le summary et l'operationId. Le summary est une courte string destinée aux lecteurs humains. Pour la méthode get sur notre path slash users, le summary pourrait simplement être Lister tous les utilisateurs enregistrés. Il apparaît dans les interfaces de documentation générées pour que les développeurs puissent scanner rapidement les endpoints disponibles. Voici le point clé. Le champ operationId est destiné aux machines. C'est une string unique utilisée pour identifier l'opération à travers tout ton document d'API. Les générateurs de code s'appuient fortement sur l'operationId pour nommer les fonctions et les méthodes à l'intérieur des SDK clients qu'ils buildent. Si tu donnes à ton opération get un operationId listUsers, le client Python ou TypeScript généré proposera une fonction spécifiquement appelée listUsers. Cette string doit être absolument unique. Si deux opérations partagent le même operationId, les outils de génération automatique produiront du code cassé ou planteront complètement. La structure repose sur une imbrication stricte et prévisible. Les Paths mappent vers des Path Items, les Path Items mappent vers des méthodes HTTP, et les méthodes mappent vers des Operation Objects définis par des identifiants uniques. Maîtriser cette hiérarchie exacte garantit que les développeurs humains et les outils d'automatisation en aval pourront interagir avec ton architecture d'API sans avoir à deviner. C'est tout pour cet épisode. À la prochaine !
6

Endpoints dynamiques avec Parameters

3m 54s

Rendre vos endpoints dynamiques en utilisant le path templating et l'objet Parameter. Nous couvrons les paramètres de path, query, header et cookie.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 6 sur 19. Les endpoints statiques ont leurs limites. Pour créer une API vraiment utile, tu as besoin d'un moyen de passer des arguments dynamiques directement dans la requête pour changer la façon dont une opération s'exécute ou les données qu'elle cible. Cet épisode est entièrement consacré aux endpoints dynamiques avec des paramètres. Commençons par le path de l'URL lui-même. Dans OpenAPI, tu définis les sections dynamiques d'une URL en utilisant le path templating. Tu fais ça en entourant un nom de variable avec des accolades. Prends l'exemple d'une API e-commerce. Si tu veux récupérer une commande spécifique, ton path ressemble à slash orders slash accolade ouvrante orderId accolade fermante. Dans ton document OpenAPI, tu décris cette variable en utilisant un Parameter Object. Tu spécifies son emplacement en définissant le champ in sur la valeur path. Les gens essaient parfois de rendre les path parameters optionnels. Tu ne peux pas faire ça. Un path parameter définit structurellement la route. Si le paramètre est manquant, la route n'existe tout simplement pas. À cause de cette règle, tout paramètre dont la location est path doit toujours définir le champ required sur true. Et si tu veux des modificateurs optionnels ? Ça nous amène à la deuxième location, où le champ in est égal à query. Les query parameters apparaissent tout à la fin de l'URL après un point d'interrogation. Pour en revenir à notre API e-commerce, tu pourrais vouloir une liste de commandes, mais tu veux seulement voir celles qui sont déjà en transit. Tu ajoutes point d'interrogation status égal shipped à l'URL. Contrairement aux path parameters, les query parameters ne définissent pas la location de la ressource. Ils filtrent ou modifient le résultat, ce qui veut dire que leur champ required peut être défini sur true ou false. L'URL n'est pas le seul endroit pour passer des paramètres. Le Parameter Object supporte deux autres locations. Définir le champ in sur header te permet de définir des headers HTTP personnalisés attendus par ton opération. Par exemple, tu pourrais exiger un header personnalisé indiquant un type d'appareil client spécifique. Note que les headers standards comme Accept ou Authorization sont strictement exclus du Parameter Object parce qu'ils sont gérés ailleurs dans OpenAPI. Enfin, définir la location sur cookie te permet de documenter les paramètres passés via les cookies du navigateur, comme un token de session temporaire. Déclarer où vit un paramètre n'est que la première étape. Tu dois aussi définir sa forme. À l'intérieur du Parameter Object, tu utilises le champ schema pour définir le type de données sous-jacent. Ça dit exactement au consommateur de l'API si cet orderId est un integer, une string, ou un format spécifique comme un UUID. Ensuite, tu as le champ style. Ça dicte comment le paramètre est sérialisé dans la requête HTTP. La sérialisation a beaucoup d'importance quand tu passes des données complexes comme des arrays ou des objets. Si tu passes une liste de statuts dans une query string, le champ style détermine le format. Une valeur de style form pourrait séparer plusieurs valeurs avec une esperluette, tandis qu'une valeur de style simple sort une liste séparée par des virgules. En combinant les champs location, schema, et style, tu donnes au client des instructions exactes sur la façon de formater la requête réseau. Voici l'idée clé. Le Parameter Object ne se contente pas de décrire les inputs par simple courtoisie. Il dicte strictement l'empreinte exacte de ce qu'une opération accepte, en imposant les types de données et les formats avant même qu'une seule ligne de ta logique backend ne s'exécute. Si tu trouves ces épisodes utiles, tu peux soutenir l'émission en cherchant DevStoriesEU sur Patreon. C'est tout pour celui-ci. Merci d'avoir écouté, et continue de développer !
7

Structurer les entrées : Request Bodies

3m 28s

Gérer des payloads de données complexes. Plongez dans l'objet Request Body et apprenez à gérer la négociation de contenu via les Media Types.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 7 sur 19. Quand tu envoies des centaines de champs à une API, les query parameters montrent leurs limites. Tu as besoin d'un package structuré. Ce package est défini par la structuration des Request Bodies en entrée. Alors que les requêtes GET s'appuient sur l'URL path et la query string, les requêtes POST, PUT et PATCH font le gros du travail en transportant un payload. Ce payload contient des données complexes et imbriquées. Dans les anciennes spécifications Swagger 2.0, tu te souviens peut-être qu'on définissait les body parameters ou les form parameters directement à côté des inputs de header et de path. OpenAPI version 3 a fondamentalement changé ça. Elle a complètement abandonné les body parameters pour introduire un seul Request Body Object dédié. Le Request Body Object se situe au niveau de l'opération dans le design de ton API. Sa caractéristique principale, c'est qu'il repose fortement sur la content negotiation. Tu ne te contentes pas de décrire les données ; tu les map à des media types spécifiques. Ce mapping se fait à l'intérieur de la content map. La content map est un dictionnaire où les clés sont des types MIME standards, comme application slash json, et les valeurs sont des Media Type Objects qui détaillent à quoi ressemble ce payload spécifique. Prends l'exemple d'un client qui upload un nouveau profil utilisateur. Ce profil contient un nom, une adresse e-mail, des préférences utilisateur et un objet adresse imbriqué. Au lieu de bourrer tout ça dans des variables d'URL, le client envoie un payload JSON. Dans ton document OpenAPI, sous le request body, tu crées une content map avec la clé exacte application slash json. Ça déclare explicitement que l'API n'accepte que du JSON pour cette opération. Si un client essaie d'envoyer du XML ou du plain text, le serveur sait immédiatement qu'il doit rejeter la requête avec une erreur unsupported media type. Cette structure est super flexible. Si l'upload de ton profil utilisateur nécessite une photo de profil en plus des données textuelles, tu gères ça exactement au même endroit. Tu ajoutes une deuxième clé à la content map pour multipart slash form-data. Ce Media Type Object spécifie ensuite les règles pour le payload mixte. Chaque media type a sa propre définition indépendante. Ça permet exactement au même endpoint d'API de traiter des formats de données fondamentalement différents, en se basant uniquement sur le header Content-Type que le client envoie dans la requête HTTP. À l'intérieur du Request Body Object lui-même, à côté de la content map, tu trouveras un flag required. C'est une simple propriété booléenne. Le mettre à true signifie que la requête va échouer immédiatement si le client envoie un body vide. Ça force la présence du payload avant même que le serveur n'essaie de valider les données à l'intérieur. Les règles structurelles du payload lui-même sont gérées par un schema attaché au Media Type Object, même si la mécanique approfondie du design de JSON Schema sera abordée dans l'épisode dix. Voici l'idée clé. Le Request Body Object découple le payload de données brutes des paramètres de transport HTTP, ce qui permet à un seul endpoint d'appliquer des règles de validation totalement différentes, en se basant uniquement sur le media type déclaré dans la content map. C'est tout pour cet épisode. Merci pour ton écoute, et continue de coder !
8

Attentes et erreurs : Responses

3m 45s

Définir les résultats d'un appel d'API à l'aide de l'objet Responses. Nous explorons le mappage des codes d'état HTTP vers des structures de réponse spécifiques et la solution de repli de la réponse par défaut.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 8 sur 19. La plupart des développeurs documentent le happy path, mais la véritable résilience d'une API vient du fait de définir strictement et exactement comment les choses vont échouer. Si tu dis seulement aux clients ce qui se passe quand tout marche parfaitement, ton API n'est documentée qu'à moitié. Aujourd'hui, on va s'intéresser aux Expectations et aux Error Responses. Dans OpenAPI, les responses servent de garantie ultime pour le contrat. Elles formalisent la promesse que si le client envoie une request spécifique, l'API renverra un payload connu ou une erreur structurée. Cette promesse est gérée par le Responses Object. Vois ça comme une table de routage pour les résultats. Les clés dans cette map sont des HTTP status codes écrits sous forme de strings, comme le texte 200 ou 404. Les valeurs attachées à ces clés sont des Response Objects individuels, qui détaillent exactement ce qui est renvoyé au client sur le réseau. Voici un point clé sur le formatage de ces objets. Dans une grande partie d'OpenAPI, les champs description sont complètement optionnels. Tu les utilises quand tu veux ajouter du contexte utile pour d'autres développeurs. Dans un Response Object, le champ description est strictement requis. Si tu l'oublies, toute ta définition d'API devient invalide. Pas besoin que ce soit un long paragraphe. Une phrase courte et précise qui explique le résultat suffit, mais le parser va imposer sa présence. Prends un scénario pratique où un client demande un profil utilisateur spécifique. Pour le cas de succès, tu définis une clé pour la string 200. À l'intérieur de ce Response Object, tu fournis ta description obligatoire, en mettant par exemple Utilisateur récupéré avec succès. Ensuite, tu définis le champ content. Ce champ mappe un media type, le plus souvent application/json, directement au schema qui définit la structure de ton objet utilisateur. Le code client sait maintenant exactement à quelles propriétés s'attendre quand l'appel réussit. Ça couvre le résultat attendu. Maintenant, tu dois documenter l'échec. Sous le même Responses Object, tu définis une autre clé pour 404. La description requise pourrait simplement être Utilisateur introuvable. Tout comme pour le cas de succès, le champ content mappe ici application/json à un schema, mais cette fois, il pointe vers ta structure d'erreur standardisée. Grâce à ce contrat explicite, l'application cliente peut parser la réponse d'erreur en toute sécurité et afficher un prompt utile à l'utilisateur final au lieu de crasher sur des données inattendues. Il y aura toujours des cas où tu ne pourras pas prédire chaque code d'erreur que ton architecture pourrait produire. Un reverse proxy pourrait renvoyer une 502 Bad Gateway, ou un web application firewall pourrait injecter une 403 Forbidden. C'est là qu'intervient le wildcard default. Au lieu d'un HTTP status code numérique, tu utilises le mot exact default comme clé. Ça agit comme une définition catch-all. Si le serveur renvoie un status code que tu n'as pas explicitement listé dans le Responses Object, le client fait un fallback sur la structure définie sous default. Ça agit comme un filet de sécurité pour l'error handling générique, en s'assurant que le client sait toujours comment lire le payload d'erreur. Une définition d'API vraiment robuste ne se contente pas d'expliquer le scénario parfait ; elle fournit une map précise et prévisible de toutes les façons possibles dont le système peut échouer. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.
9

Réutilisabilité avec Components

4m 07s

Garder votre spécification DRY (Don't Repeat Yourself). Découvrez comment utiliser l'objet Components et les objets de référence ($ref) pour partager des définitions à travers votre document.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 9 sur 19. Si ton API a 100 endpoints, et qu'ils renvoient tous exactement la même structure de pagination, le copier-coller est une recette pour le désastre. Un petit changement dans le nom d'un champ, et tu dois chercher manuellement 100 définitions éparpillées dans ton document. Le mécanisme structurel qui résout ce problème, c'est la réutilisabilité avec les Components. La spécification OpenAPI s'attaque à la surcharge de la spec grâce à une section dédiée au niveau root, appelée le Components Object. Vois ça comme un dictionnaire centralisé ou une librairie interne pour la définition de ton API. Au lieu de définir des structures de données complexes, des query parameters standards ou des réponses serveur répétitives en inline sous chaque path individuel, tu les déclares une seule fois dans le Components Object. Ça établit une stricte single source of truth. Avant d'expliquer la mécanique, je dois dissiper une idée reçue très courante sur le comportement de cette section. Définir un schema, un header ou un parameter dans le Components Object ne l'expose pas automatiquement dans la documentation de ton API ou dans ta logique de routing. La section components est entièrement passive. Elle n'a aucun effet direct sur tes endpoints. Un component n'a d'importance que si un path ou une opération pointe explicitement vers lui. Pour rendre un component actif, tu utilises le Reference Object. Dans la syntaxe OpenAPI, c'est représenté par le mot-clé dollar-sign-ref. Le Reference Object utilise un JSON Pointer pour dire exactement au tooling où trouver la définition partagée. Une string de pointeur interne standard commence par un symbole dièse, suivi d'un slash, du mot components, d'un autre slash, du nom de la catégorie spécifique, et enfin du nom personnalisé que tu as donné à ton objet. Prenons un scénario concret. Presque toutes les APIs ont besoin d'une façon cohérente de renvoyer les erreurs client et serveur. Tu veux que tes réponses 400 Bad Request et 500 Internal Server Error partagent exactement la même structure sur tous les endpoints, contenant peut-être un code d'erreur de type integer et une string de message descriptif. D'abord, tu descends vers ton Components Object au niveau root. À l'intérieur, tu ouvres une catégorie appelée schemas. Sous schemas, tu définis un nouvel objet générique nommé ErrorModel et tu spécifies tes properties code et message. Ta structure d'erreur générique est maintenant stockée en toute sécurité. Ensuite, tu remontes vers tes paths d'API. Quand tu définis la réponse de niveau 400 pour un endpoint de création d'utilisateur, tu sautes complètement l'écriture des properties du schema en inline. À la place, tu fournis une clé dollar-sign-ref. Sa valeur est le path exact vers ton schema stocké : hash-slash-components-slash-schemas-slash-ErrorModel. Tu insères exactement la même string de référence dans la réponse de niveau 500. Tu répètes cette référence à travers tes endpoints de facturation, tes endpoints d'authentification et tes endpoints de recherche. Des dizaines d'opérations pointent maintenant vers une seule définition. Cette stratégie d'organisation s'étend bien au-delà des schemas. Le Components Object fournit des catégories spécifiques pour divers éléments d'API. Tu peux stocker des arguments de pagination standards dans la catégorie parameters. Tu peux définir des structures de payload entières dans requestBodies, ou des prérequis d'autorisation standards dans securitySchemes. La logique opérationnelle reste identique pour tous. Définis l'objet une fois dans son bucket correspondant, puis câble-le dans tes paths opérationnels en utilisant une référence. Voici l'idée clé. Construire une spec d'API maintenable, c'est fondamentalement une question de contrôle de la duplication. Quand un nouveau besoin émerge et te force à ajouter un champ timestamp à chaque réponse d'erreur, utiliser les components signifie que tu modifies le ErrorModel à un seul endroit, et chaque opération sur toute ton API hérite automatiquement de la mise à jour. C'est tout pour cet épisode. À la prochaine !
10

Types de données et Schemas

3m 52s

Appliquer des règles de données à l'aide de l'objet Schema. Nous couvrons l'intégration d'OpenAPI avec JSON Schema Draft 2020-12, les formats de données et les types primitifs.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 10 sur 19. Tu sais ce qu'est un integer, mais ta base de données a besoin de savoir si c'est une valeur 32 bits ou 64 bits. Les schemas comblent ce vide. Cet épisode est entièrement consacré aux Data Types et aux Schemas. Le Schema Object agit comme un moteur de validation rigoureux pour ton API. Il se place juste en dessous de tes paramètres, de tes request bodies et de tes réponses. Au lieu de juste dire à un client d'envoyer un payload JSON générique, un schema dicte exactement la forme, le type et les limites de ces données. Il agit comme un filtre strict à la frontière de ton système. Si une requête entrante ne respecte pas les règles définies dans le schema, elle échoue à la validation avant même que ta logique applicative ne la voie. Historiquement, les développeurs rencontraient un point de friction majeur en définissant ces règles. La version 3.0 d'OpenAPI utilisait son propre dialecte personnalisé de JSON Schema. C'était proche du standard, mais fondamentalement incompatible sur quelques points frustrants, ce qui causait des maux de tête infinis avec le tooling. La version 3.1 d'OpenAPI résout complètement ça. Ce n'est plus un dialecte sur mesure. OpenAPI 3.1 est maintenant entièrement aligné avec le JSON Schema moderne. Plus précisément, il agit comme un superset du JSON Schema Draft 2020-12. Ça veut dire que n'importe quel document JSON Schema standard que tu as déjà est automatiquement un schema OpenAPI 3.1 valide. Être un superset signifie simplement qu'OpenAPI ajoute quelques mots-clés spécifiques aux API par-dessus, comme des identifiants de configuration XML, sans casser le standard sous-jacent. Au cœur de ces règles de schema, on trouve le mot-clé type. OpenAPI s'appuie sur les primitive data types définis par JSON Schema. Tu as les strings, les integers, les numbers et les booleans. La distinction entre number et integer est strictement appliquée. Le type number gère les valeurs floating-point et les doubles, tandis que le type integer rejette spécifiquement tout ce qui a une fraction décimale. Voici le point essentiel. Savoir que quelque chose est simplement une string ou un integer donne rarement assez de contexte à un système backend. C'est là que le modificateur format devient essentiel. Le mot-clé format permet de restreindre un primitive type un peu large en quelque chose de spécifique pour lequel ton code peut allouer de la mémoire ou faire des validations. Le primitive type dit au parser JSON comment lire les données brutes, et le format dit à ton application exactement comment interpréter la valeur. Par exemple, si tu définis une property comme un integer, tu peux ajouter un format int32 ou int64 pour spécifier sa taille exacte en octets. Si ton type est une string, tu peux appliquer un format comme date-time, password ou email. La spécification OpenAPI définit un registre standard pour ces formats, mais le champ reste au final une open string, ce qui veut dire que le tooling peut supporter des formats custom si ton application en a besoin. Prenons un scénario concret. Tu dois définir un object User pour un endpoint d'inscription. Tu commences par créer un schema de type object. À l'intérieur de cet object, tu définis deux properties, un ID et une adresse email. Pour la property ID, tu mets le type sur integer et le format sur int64. Pour la property adresse email, tu mets le type sur string et le format sur email. Enfin, tu spécifies un array de required properties contenant les noms des champs ID et email. Tu as maintenant un contrat strict et exécutable. Si un client envoie une property email qui ne ressemble pas à une adresse email valide, ou un ID qui dépasse la limite numérique de 64 bits, l'API gateway ou le framework rejette le payload immédiatement. Cette précision à la frontière de l'API t'évite d'écrire une logique de vérification de données interminable dans tes controllers. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
11

Définir les Security Schemes

4m 12s

Verrouiller la porte d'entrée de votre API. Apprenez à configurer l'objet Security Scheme pour les clés d'API, l'authentification HTTP (Basic/Bearer) et OAuth2.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 11 sur 19. Avant de pouvoir protéger un endpoint sensible, tu dois déclarer formellement et précisément à quoi ressemble un badge d'identification valide. Tu ne peux pas juste exiger une authentification du client. Tu dois spécifier le mécanisme exact qu'il doit utiliser, les URL qu'il doit appeler, et les paramètres qu'il doit envoyer. Définir les security schemes, c'est comme ça que tu résous ce problème. Vois cette étape comme un inventaire des serrures qui existent dans ton système. Tu décris les types de serrures disponibles, mais tu ne les installes pas encore sur des portes spécifiques. Dans OpenAPI, tu définis ces serrures dans l'objet components, plus précisément dans une section appelée security schemes. Chaque serrure reçoit un nom de référence personnalisé de ton choix. À l'intérieur de ce nom personnalisé, tu déclares son type et ses propriétés requises. Il y a cinq types principaux de security schemes dans la spécification OpenAPI 3 point 1. Le premier, c'est le type http. Ça couvre les mécanismes d'authentification HTTP standards définis par la RFC 7235, comme l'authentification Basic ou Bearer. Pour définir un scheme de token HTTP Bearer standard, tu crées une entrée sous security schemes. Tu définis la propriété type avec la string http, et tu définis la propriété scheme avec la string bearer. Tu peux aussi ajouter de façon optionnelle une propriété bearer format pour donner un indice sur le type de token, comme en fournissant la string JWT. Voici le point essentiel. Quand tu utilises le scheme http bearer, la spécification suppose implicitement que le token sera envoyé dans le header HTTP Authorization standard. Tu ne dis pas à OpenAPI où chercher. Mais le deuxième type, le scheme api key, est complètement différent. Pour une api key, tu dois spécifier explicitement à la fois la propriété name, qui est le nom exact du champ, et la propriété in, qui dicte où va la clé. La propriété in n'accepte que trois valeurs : query, header, ou cookie. Si tu attends un header custom comme X API Key, utilise le type api key. Si tu utilises des headers Authorization standards, utilise le type http. Le troisième type, c'est oauth2. Celui-ci demande une configuration plus structurée parce que OAuth2 a plusieurs flows distincts. Pour définir un flow authorization code OAuth2 complexe, tu commences par définir le type sur oauth2. Ensuite, tu fournis un objet flows. À l'intérieur de flows, tu ajoutes un objet authorization code. Cet objet imbriqué requiert deux URL spécifiques. Tu fournis l'authorization url où l'utilisateur se connecte, et la token url où l'application échange un code contre un token. Tu dois aussi fournir un objet scopes, qui mappe des noms de scopes spécifiques à de courtes descriptions textuelles de ce que ces scopes autorisent. Le quatrième type, c'est open id connect. C'est beaucoup plus simple à déclarer que OAuth2. Tu définis le type sur open id connect et tu fournis une seule propriété open id connect url. Ça pointe directement vers le discovery document well-known que les clients utilisent pour se configurer automatiquement. Enfin, le cinquième type c'est mutual t l s, qui signifie mutual Transport Layer Security. Tu définis simplement le type sur mutual t l s. Ça signale que le client doit fournir un certificat X 509 pendant le handshake TLS initial pour s'authentifier, entièrement en dehors de la couche applicative HTTP. La chose la plus utile à retenir ici, c'est que définir des security schemes sépare le mécanisme d'authentification des endpoints qui le requièrent. Tu construis tes serrures une seule fois dans un catalogue centralisé, pour t'assurer que les clients savent exactement comment formater leurs credentials avant même d'essayer de frapper à la porte. Au fait, si tu veux soutenir l'émission, tu peux chercher DevStoriesEU sur Patreon. C'est tout pour cet épisode. Merci de ton écoute, et continue de développer !
12

Appliquer les Security Requirements

3m 37s

Sécuriser vos opérations. Nous explorons l'objet Security Requirement et comment appliquer des règles d'authentification globalement ou par route.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 12 sur 19. Appliquer la sécurité est un exercice d'équilibre : tu veux verrouiller l'ensemble du coffre-fort globalement, tout en laissant le lobby ouvert pour les visiteurs. Pour faire ça sans te bloquer l'accès, tu dois comprendre comment OpenAPI applique les Security Requirements. Une fois que tu as défini tes security schemes dans la section components de ton document OpenAPI, tu dois les attacher à tes endpoints. Tu fais ça en utilisant le security array. Cet array contient des Security Requirement Objects, qui référencent les noms des schemes que tu as créés plus tôt. Tu peux déclarer ce security array à deux endroits : globalement à la racine de ton document OpenAPI, ou localement dans un Operation Object spécifique. Si tu le définis à la racine, chaque endpoint de ton API hérite de cette exigence. Si tu le définis dans une opération, ça override complètement la configuration globale. Ça ne merge pas avec les paramètres globaux, ça les remplace entièrement. Imagine un scénario où tu définis une exigence globale : chaque route de l'API a besoin d'un Bearer token. Ça sécurise le coffre-fort. Mais tu as aussi une route de login. Si la route de login hérite de cette exigence globale de token, les nouveaux utilisateurs ne pourront jamais s'authentifier parce qu'ils n'ont pas encore de token. Tu dois override le verrouillage global. Une erreur courante est de simplement omettre le champ security sur l'opération de login, en supposant que ça implique qu'il n'y a pas de sécurité. Si tu omets ce champ, l'opération prend juste l'exigence globale par défaut, et tes utilisateurs sont bloqués. Pour autoriser explicitement l'accès anonyme, tu dois définir le security array sur l'opération de login et mettre un objet vide dedans. Cet objet vide indique à OpenAPI que l'exigence pour accéder à cet endpoint spécifique n'est absolument rien. Le verrouillage global est contourné, et les visiteurs peuvent atteindre le lobby. C'est là que ça devient intéressant. La façon dont tu structures les éléments dans le security array dicte la logique de ton authentification. Ça gère les scénarios logiques OR et AND en se basant purement sur les limites des objets. Si ton array contient deux Security Requirement Objects séparés, par exemple, un objet demandant une API key et un deuxième objet séparé demandant OAuth2, ça crée un OR logique. L'API acceptera une requête si le client satisfait soit le premier objet, soit le deuxième. Si tu as besoin d'un AND logique, tu changes les limites. Disons qu'une requête doit avoir à la fois un token OAuth2 et une signature dans un custom header. Tu mets ces deux noms de scheme dans un seul Security Requirement Object. Parce qu'ils partagent le même objet, l'API exige que tous soient valides avant de laisser passer la requête. Quand tu écris ces objets, tu mappes le nom de ton scheme à un array. Si tu utilises OAuth2 ou OpenID Connect, cet array liste les scopes spécifiques requis pour l'opération, comme la lecture ou l'écriture de données. Si tu utilises une API key ou un basic HTTP scheme, les scopes ne s'appliquent pas, donc tu dois mapper le nom du scheme à un array vide pour satisfaire la spécification. La structure physique de ton security array est ton outil principal pour définir la logique d'accès. Maîtrise la différence entre lister des éléments dans l'array et lister des éléments dans un seul objet, et tu pourras créer n'importe quel flow d'authentification dont ton système a besoin. C'est tout pour cet épisode. Merci d'avoir écouté, et continue à développer !
13

API asynchrones avec Webhooks

3m 39s

Gérer les requêtes hors bande. Plongez dans la fonctionnalité Webhooks introduite dans OpenAPI 3.1 et comprenez en quoi elle diffère des Callbacks traditionnels.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 13 sur 19. REST est super pour poser des questions, mais que se passe-t-il quand ton API doit être celle qui lance la conversation ? Les API asynchrones avec des webhooks gèrent ça en poussant les données au moment où un événement se produit, ce qui élimine complètement le besoin de faire du polling constant. Historiquement, les consommateurs devaient écrire des scripts qui vérifiaient en boucle tes endpoints pour voir si un statut avait changé. C'était inefficace, aussi bien pour leurs serveurs que pour les tiens. OpenAPI 3.1 a résolu cette limitation en introduisant le champ webhooks directement à la racine du document OpenAPI. Cet ajout a apporté un support de premier ordre pour la communication asynchrone et event-driven dans les spécifications d'API standards. Au lieu de documenter uniquement ce qu'un client envoie à ton serveur, le champ webhooks te permet de documenter exactement l'inverse. Tu définis les requêtes HTTP que ta plateforme va initier et envoyer au serveur du consommateur. Il faut tracer une ligne claire entre les webhooks et les callbacks, car la spécification OpenAPI les gère très différemment. La distinction réside dans la façon dont l'URL de destination est enregistrée. Les callbacks sont déclenchés par une requête API spécifique et active. Un client appelle un endpoint d'abonnement sur ton API et fournit une URL cible directement là, dans le payload de la requête. Comme ils sont liés à une opération, les callbacks sont définis à l'intérieur de cet objet d'opération spécifique. Les webhooks sont enregistrés out-of-band. Un développeur se connecte à un dashboard de gestion, navigue vers une page de paramètres et colle son URL de destination dans un formulaire. La spécification de l'API se fiche de savoir comment l'URL a été récupérée. Parce que les webhooks existent indépendamment de tout appel API au runtime, ils sont placés au plus haut niveau de ton document OpenAPI, juste à côté de tes paths et components standards. Pour documenter un webhook, tu ouvres la map webhooks au niveau de la racine. Chaque clé à l'intérieur de cette map est une simple string qui nomme l'événement. Par exemple, tu pourrais utiliser la string payment dot successful. La valeur attachée à cette clé est un Path Item Object standard. C'est exactement la même structure que tu utilises pour définir tes endpoints REST normaux. À l'intérieur de ce Path Item Object, tu déclares la méthode HTTP que ta plateforme va utiliser pour livrer l'événement, ce qui est presque toujours une requête POST. Voici l'idée clé. La perspective est complètement inversée, mais les outils restent identiques. Tu utilises des objets schema standards pour définir le body de la requête que ta plateforme va envoyer. Dans le scénario payment dot successful, tu spécifies que le payload sera un objet JSON contenant un ID de paiement unique, le montant exact facturé et un timestamp. Tu peux aussi définir des headers, ce qui est critique pour les webhooks parce que tu as généralement besoin de documenter un header de signature cryptographique pour que le consommateur puisse vérifier que le payload vient bien de toi. Enfin, tu documentes les réponses que tu attends en retour de la part du consommateur. Tu pourrais indiquer que ton système attend un status code 200 OK dans les trois secondes, sinon ton système réessaiera la livraison plus tard. En standardisant cette documentation d'API inversée, tu donnes aux consommateurs tout ce dont ils ont besoin pour générer leur propre code serveur. Ils savent exactement quel payload parser, quels headers valider, et quels status codes renvoyer. Le champ webhooks au niveau de la racine fait passer le design d'API de simples interactions request-response à une architecture event-driven entièrement documentée. C'est tout pour cette fois. Merci d'avoir écouté, et continue à développer !
14

Transitions d'état avec Links

3m 42s

Cartographier dynamiquement les flux de travail d'API. Nous explorons l'objet Link pour décrire les relations entre les opérations, offrant une approche pragmatique de HATEOAS.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 14 sur 19. Créer un utilisateur est la première étape, mais comment un client automatisé sait-il intuitivement où aller ensuite pour récupérer ce profil utilisateur ? Tu pourrais hardcoder le workflow dans ton code client, mais ça casse à la seconde où la structure de ton API change. La solution à ça, ce sont les transitions d'état avec les Links. Dans OpenAPI, l'objet Link se trouve à l'intérieur d'une response et mappe les données de cette response vers les parameters d'une autre opération. Pour être parfaitement clair, les links n'exécutent pas les requêtes automatiquement. Ils ne transforment pas OpenAPI en un moteur d'orchestration actif. Ils fournissent simplement des instructions statiques à ton tooling, tes SDKs ou ta documentation sur la façon de construire la prochaine requête logique dans un workflow. Si tu as déjà buildé des APIs, tu te dis peut-être que ça ressemble exactement à du HATEOAS strict, où le serveur envoie des links hypermédia dynamiques dans le payload de la response. Les links OpenAPI offrent une alternative developer-friendly à cette approche. Au lieu de forcer le backend à injecter des URIs dynamiques dans chaque response au runtime, les links OpenAPI décrivent les transitions d'état du workflow de manière statique, directement dans la définition de l'API. Les outils clients peuvent comprendre le workflow sans avoir besoin de parser des payloads en live pour découvrir quelles actions sont possibles. La logique s'articule en connectant une response source à une opération cible. Prends l'exemple d'une requête POST standard utilisée pour créer un nouvel utilisateur. La response retourne un body JSON contenant un user ID fraîchement généré. À l'intérieur de la définition de cette response spécifique, tu ajoutes une map de links. Chaque entrée dans cette map définit une relation vers une autre opération, comme la requête GET qui récupère le profil utilisateur. Tu identifies l'opération cible en utilisant l'un de ces deux champs mutuellement exclusifs. Le premier, c'est l'operation ID, qui est une simple string correspondant à l'identifiant unique de l'opération cible. Le second, c'est l'operation reference, qui utilise un JSON Pointer standard pour naviguer dans le document OpenAPI et localiser le path cible et la méthode HTTP. L'operation ID est généralement plus propre si ton API les définit de manière cohérente, tandis que l'operation reference est utile pour pointer vers des opérations dans des documents OpenAPI externes. Une fois que tu pointes vers l'opération cible, tu dois lui fournir les bonnes données. Tu fais ça en utilisant une map de parameters. Les clés dans cette map représentent les noms des paramètres que l'opération cible attend, comme le path parameter du user ID. Les valeurs sont des runtime expressions qui disent au tooling où extraire ces données depuis le contexte actuel. Une runtime expression est une syntaxe spécifique qui évalue les données pendant l'appel d'API. Tu peux écrire une expression qui indique au client de regarder dans le response body, de localiser le champ ID, et d'extraire sa valeur. Tu n'es pas limité au response body. Les runtime expressions peuvent extraire des valeurs depuis les response headers, le request path d'origine, ou les query parameters de la requête d'origine. Si l'opération cible nécessite un request body au lieu de simples paramètres, l'objet Link fournit un champ request body. Ça te permet de mapper une runtime expression directement dans le payload de la requête suivante. Quand un générateur de SDK traite ces links, il peut créer automatiquement des appels de méthodes chaînés, ce qui permet à un développeur de créer un utilisateur et d'appeler immédiatement une méthode générée pour fetch le profil sur l'objet retourné. Voici le point clé. La vraie puissance de l'objet Link, c'est qu'il fait le pont entre des endpoints isolés, transformant un dictionnaire plat de paths d'API en une carte navigable d'actions que tes clients peuvent suivre en toute confiance, sans dépendre d'URLs hardcodées. Merci de ton écoute — à la prochaine.
15

Documentation interactive avec Swagger UI

3m 41s

Donner vie à votre spécification. Découvrez comment installer et servir Swagger UI pour fournir un portail de documentation visuel et interactif aux développeurs.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 15 sur 19. Une spécification JSON parfaitement rédigée ne sert à rien si les développeurs qui consomment ton API refusent de la lire. Tu dois la rendre visuelle. C'est exactement là qu'interviennent les Interactive Docs avec Swagger UI. Jusqu'à présent, on a traité un document OpenAPI comme un fichier texte brut contenant des endpoints et des schemas. Swagger UI prend ce fichier JSON ou YAML et le transforme en une page web interactive. Ça déplace toute l'attention de l'écriture de la spécification vers sa consommation active. Les développeurs peuvent parcourir les endpoints, inspecter les query parameters, et exécuter des requêtes HTTP en direct depuis leur navigateur. Ça sert de pont entre un contrat statique et un outil de test en live. Si tu veux héberger cette interface toi-même, tu vas sûrement commencer avec Node Package Manager. Au moment de l'installer, tu vas tout de suite tomber dans un piège de nommage très courant. Il y a deux packages principaux. Le premier s'appelle simplement swagger tiret ui. N'utilise pas celui-là, à moins de faire tourner un build tool comme Webpack ou Rollup pour compiler une application front-end sur mesure. Si ton but c'est juste d'héberger la documentation directement, tu as besoin du package qui s'appelle swagger tiret ui tiret dist. Le suffixe dist signifie distribution. Il contient les assets statiques pré-buildés et prêts à être servis, comme les bundles JavaScript principaux, les feuilles de style CSS, et un fichier index HTML. Tu déposes ces fichiers sur n'importe quel serveur web basique, et ils marchent immédiatement. Si tu ne veux pas du tout gérer de packages node ou de fichiers locaux, tu peux embarquer exactement ces mêmes assets statiques dans une page web vide en utilisant un content delivery network comme unpkg. Tu ajoutes une balise style HTML standard qui pointe vers le fichier CSS de Swagger UI sur unpkg, et une balise script pour le bundle JavaScript. Ensuite, tu écris un court bloc d'initialisation en JavaScript qui pointe vers l'adresse web où se trouve ton fichier OpenAPI. Le navigateur charge la page vide, récupère les assets depuis le réseau, va chercher ta spécification, et fait le rendu de l'interface complète automatiquement. Voici le point clé. Tu n'as même pas besoin d'écrire de HTML pour déployer cette interface. La méthode la plus propre et la plus scalable, c'est d'utiliser l'image Docker officielle. Tu fais simplement un pull de l'image qui s'appelle swaggerapi slash swagger tiret ui. La faire tourner complètement out of the box va charger un exemple Petstore par défaut. Pour servir ton propre fichier local à la place, tu montes ta spécification dans le container comme un volume. Ensuite, tu passes une variable d'environnement nommée SWAGGER underscore JSON, en la faisant pointer vers le chemin exact où tu as monté ce fichier à l'intérieur du container. D'abord, tu exécutes la commande Docker run et tu mappes un port exposé comme le port quatre-vingts vers ta machine locale. Ensuite, tu mappes ton répertoire local qui contient ton fichier swagger point json vers un répertoire à l'intérieur du container. Enfin, tu configures la variable d'environnement SWAGGER underscore JSON pour cibler ce chemin de fichier interne spécifique. Quand le container démarre, il lance un serveur web léger, lit ta variable d'environnement pour localiser la spécification, et sert l'UI. Tu obtiens un portail de documentation entièrement fonctionnel qui tourne en quelques secondes sans installer une seule dépendance locale. En découplant le rendu de la documentation du code source de l'API lui-même, Swagger UI transforme un contrat texte statique en un environnement de test exécutable qui voyage sans problème à travers n'importe quelle infrastructure. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.
16

Personnaliser Swagger UI

3m 43s

Adapter l'expérience développeur. Nous nous plongeons dans la configuration de Swagger UI, la modification des options d'affichage et l'activation de fonctionnalités telles que le deep linking et la coloration syntaxique.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 16 sur 19. Ta documentation d'API met dix secondes à charger, et à chaque fois qu'un ingénieur veut montrer un endpoint spécifique à un collègue, il doit rédiger manuellement des instructions sur comment scroller et le trouver. Les paramètres par défaut sont faits pour être modifiés. Optimisons l'interface pour que tes développeurs trouvent exactement ce dont ils ont besoin en quelques millisecondes. C'est tout le but de la personnalisation de Swagger UI. Avant de modifier quoi que ce soit, il faut être très clair. Les paramètres dont on parle ne vont pas dans ton document de spécification OpenAPI. Ce sont des configurations au runtime. Tu modifies l'interface qui fait le rendu du document, pas le document lui-même. Tu injectes ces paramètres de deux manières. Si tu héberges toi-même les fichiers de l'UI, tu passes un objet de configuration au constructeur Javascript de Swagger UI au chargement de la page web. Si tu utilises l'image Docker officielle de Swagger UI, tu passes exactement ces mêmes propriétés directement au container sous forme de variables d'environnement. Le paramètre le plus fondamental indique à l'interface où trouver ta spec. Si tu as une seule API, tu utilises le paramètre appelé url, au singulier, et tu lui passes un chemin sous forme de string. Mais si tu as une architecture microservices avec plusieurs APIs distinctes, tu utilises le paramètre urls, au pluriel. Tu lui passes un array contenant des objets, chacun avec un nom et un lien. Ça génère automatiquement un menu déroulant dans la barre supérieure de l'interface, ce qui permet à l'utilisateur de basculer facilement entre les différentes définitions d'API. Maintenant, imagine une API d'entreprise massive avec des centaines de paths et des modèles de données complexes. Si Swagger UI essaie de faire le rendu de tout ça à l'écran en même temps, le navigateur va freeze. Le paramètre qui contrôle ça, c'est docExpansion. Par défaut, il est défini sur le mot list, ce qui étend tous les tags de premier niveau mais masque les détails des opérations. Tu peux le changer en full, ce qui étend absolument tout sur la page. Cependant, pour gagner du temps de chargement sur une API massive, tu vas vouloir définir docExpansion sur none. Ça force l'interface à se charger de manière complètement repliée. Ça économise énormément de mémoire et le rendu est instantané, laissant l'utilisateur ouvrir uniquement ce dont il a vraiment besoin. Une fois que l'utilisateur a trouvé ce dont il a besoin, il voudra le partager. Par défaut, cliquer sur les opérations dans Swagger UI ne change pas la barre d'adresse du navigateur. Si tu mets le paramètre deepLinking sur true, l'interface ajoute un fragment de hash à l'URL à chaque fois qu'un utilisateur étend un endpoint ou un tag. Tes développeurs peuvent copier cette URL exacte et l'envoyer à un collègue, pour le faire atterrir précisément sur une opération spécifique au lieu du haut de la page. Voici le point clé. Si ta documentation sert principalement de sandbox, tu veux réduire la friction. Normalement, un utilisateur doit cliquer sur un bouton intitulé Try it out sur une opération pour débloquer les champs de saisie. Si tu mets le flag tryItOutEnabled sur true, ces champs de saisie sont actifs dès l'instant où l'opération est étendue. L'utilisateur peut juste taper et exécuter sans ce clic supplémentaire. Personnaliser Swagger UI au runtime te donne le pouvoir de façonner l'expérience de documentation autour de l'intention de l'utilisateur, transformant un rendu générique en un outil ultra-performant sur mesure pour ton équipe. Merci de m'avoir écouté. Prenez soin de vous tous.
17

Concevoir avec Swagger Editor

3m 21s

Écrire des définitions d'API avec un retour instantané. Explorez les fonctionnalités, l'installation et les capacités de validation en temps réel du Swagger Editor classique.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 17 sur 19. Écrire des specs OpenAPI à la main dans un éditeur de texte standard, c'est un vrai cauchemar de fautes de frappe et de brackets mal alignés. Il te faut un environnement qui te crie dessus à la milliseconde où tu indentes mal un path. C'est exactement ce que t'offre Designing with Swagger Editor. Swagger Editor n'est pas juste une text box. C'est un IDE conçu spécifiquement pour le standard OpenAPI. Son job principal, c'est de t'aider à designer, définir et documenter ton API from scratch. L'interface est divisée en deux. La partie gauche contient ton code YAML ou JSON brut. La partie droite affiche le rendu de la documentation interactive. Et voici le point clé. L'éditeur valide ta syntaxe par rapport à la spec OpenAPI en temps réel. Si tu fais une faute de frappe dans le nom d'un objet ou que tu oublies un champ requis, il flag l'erreur instantanément, en te disant exactement quelle ligne est cassée. Tu n'as pas besoin de lancer un script de build séparé pour découvrir que ton indentation est mauvaise. Il faut qu'on clarifie un truc concernant les versions. Le Swagger Editor classique, connu sous le nom de version 4, est un outil legacy. Il supporte totalement OpenAPI 2.0 et 3.0. Il n'est pas conçu nativement pour OpenAPI 3.1.0. Si tu colles une spec 3.1.0 dans l'éditeur classique, la validation va fail. Pour les specs 3.1.0 modernes, tu dois passer sur Swagger Editor Next, qu'on abordera dans le grand final. Mais pour le travail standard en 3.0, l'éditeur classique reste profondément ancré dans beaucoup de workflows. Tu peux utiliser l'éditeur classique directement dans ton navigateur sans rien installer. Par contre, coller des designs d'API propriétaires sur un site web public, c'est le meilleur moyen d'énerver ton équipe de sécurité. C'est là que l'exécution en local entre en jeu. Tu peux faire tourner Swagger Editor en local sur ta propre machine. Tu peux l'installer via npm en pullant le package swagger-editor et en démarrant un serveur local. Une approche encore plus clean, c'est d'utiliser Docker. Tu pull l'image swaggerapi slash swagger-editor, et tu lances un container mappé sur ton port local. Ça fait tourner exactement le même éditeur visuel, entièrement sur ta machine. Ce setup permet aux équipes de designer en toute sécurité derrière un firewall d'entreprise, sans exposer des specs non publiées sur l'internet public. Toute la validation en temps réel se fait en local. Comme l'éditeur te donne un feedback visuel instantané, tu designes plus vite. Tu map tes paths, tu définis tes data models, et tu vérifies immédiatement que la documentation générée a du sens. Tu captes les erreurs structurelles pendant la phase de design, bien avant d'écrire ta logique backend. Si tu trouves ces épisodes utiles, tu peux soutenir l'émission en cherchant DevStoriesEU sur Patreon. L'aspect le plus précieux de l'éditeur, c'est la confiance immédiate qu'il t'apporte : une spec sans erreur à l'écran garantit que tes outils en aval fonctionneront sans problème. C'est tout pour aujourd'hui. Merci d'avoir écouté, et continue de coder !
18

Automatiser avec Swagger Codegen

3m 49s

Transformer les spécifications en code boilerplate. Apprenez comment Swagger Codegen v3 exploite votre document OpenAPI pour générer instantanément des stubs de serveur et des bibliothèques clientes.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 18 sur 19. Tu as passé des heures à concevoir la spécification parfaite. Maintenant, regarde-la générer des milliers de lignes de code serveur pour toi en trois secondes. C'est la récompense de l'automatisation avec Swagger Codegen. D'abord, on doit dissiper un piège classique de versioning. Swagger Codegen version deux supporte exclusivement les anciennes spécifications Swagger 2.0. Si tu utilises le standard moderne OpenAPI 3.0, tu dois utiliser Swagger Codegen version trois. Cet épisode se concentre entièrement sur la version trois. Swagger Codegen est un moteur basé sur des templates qui lit ton document OpenAPI et génère automatiquement le code de l'application. Il traduit tes fichiers de design en véritables classes, interfaces et opérations réseau. C'est la récompense ultime du développement design-first. Au lieu de taper à la main des centaines de fichiers boilerplate pour le routing HTTP, le parsing des paramètres et les modèles d'objets, tu laisses la machine gérer le travail répétitif. Le générateur produit deux types de code principaux. Premièrement, il génère des SDK clients. Si tu as besoin d'un client Python, JavaScript ou Go pour parler à ton API, Codegen crée une librairie prête à l'emploi. Le package client gère automatiquement les requêtes HTTP, le formatage des URL et le parsing des réponses. Les développeurs frontend ou les autres équipes de microservices peuvent simplement importer cette librairie générée et appeler les méthodes nativement au lieu de coder les requêtes réseau à la main. Deuxièmement, il génère des server stubs. Un server stub, c'est la coquille structurelle de ton application backend. Il inclut le routing de l'API, les modèles de données et les couches de validation des inputs. Il câble tout pour que le serveur puisse démarrer et écouter le trafic immédiatement. Le code généré intercepte les requêtes HTTP entrantes, valide le payload par rapport à ton schéma OpenAPI, et passe les données propres à une fonction vide. Ton seul boulot en tant que dev, c'est de remplir ces fonctions vides avec ta vraie logique métier, comme les requêtes en base de données ou les calculs. Voyons comment tu l'exécutes en pratique. Swagger Codegen s'exécute généralement via une interface en ligne de commande en utilisant un fichier d'archive Java. Tu ouvres ton terminal et tu lances la commande Java avec le flag tiret jar, en pointant vers le fichier swagger tiret codegen tiret cli point jar. Tu lui passes la commande generate. Ensuite, tu fournis trois flags essentiels. Tu utilises tiret i pour spécifier ton fichier d'input, comme openapi point yaml. Tu utilises tiret l pour définir ton langage et ton framework cibles. Par exemple, passer spring dit à l'outil de build une application Java Spring Boot. Enfin, tu utilises tiret o pour spécifier le répertoire d'output cible. Tu exécutes la commande. En quelques secondes, l'outil parse la spécification. Il mappe chaque string, integer et array défini dans ton document OpenAPI vers les types natifs équivalents en Java. Il s'appuie sur une librairie de templates logiques préconçus pour le framework cible afin d'assembler ces types. Le résultat est une structure de répertoires complète remplie de controllers, de fichiers de configuration et de data classes. Tu peux compiler ce répertoire d'output immédiatement, démarrer le serveur et taper avec succès les endpoints que tu as designés. Voici le point clé. La génération de code ne fait pas que te faire gagner du temps au début. En pilotant la structure de ton serveur et tes librairies clientes directement depuis le même fichier OpenAPI, tu garantis que ton implémentation correspond parfaitement à ton contrat, réduisant les erreurs d'intégration entre les équipes à zéro. C'est tout pour cet épisode. Merci de ton écoute, et continue de build !
19

Le futur : Swagger Editor Next

3m 43s

Adopter l'évolution de la conception d'API. Nous présentons Swagger Editor Next, son architecture et son puissant support pour OpenAPI 3.1 et la spécification AsyncAPI.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. Écosystème OpenAPI et Swagger, épisode 19 sur 19. Les API REST ne sont plus le seul moyen de communication entre les systèmes. Il est temps d'utiliser un outil qui comprend Kafka et les architectures event-driven aussi bien que HTTP. Cet outil, c'est Swagger Editor Next. Aussi connue sous le nom de version 5, c'est une refonte complète de l'interface standard que tu connais peut-être déjà. Le Swagger Editor classique est fortement lié aux API HTTP synchrones et à d'anciennes techniques de rendu. Il marche très bien pour OpenAPI 3.0, mais il peut freezer ou lagger quand il valide des fichiers très volumineux. Swagger Editor Next remplace cette infrastructure vieillissante. Il est entièrement construit sur une stack moderne React et Webpack. C'est ça le plus important. L'input de texte sous-jacent est maintenant propulsé par Monaco Editor. C'est exactement la même technologie qui fait tourner Visual Studio Code. Comme il repose sur Monaco, Swagger Editor Next gère des fichiers de spécification massifs sans ramer. Il offre un syntax highlighting robuste, une détection immédiate des erreurs et une validation précise au niveau de la ligne qui surpasse de loin la version classique. En fait, tu tapes dans un IDE léger plutôt que dans un formulaire web. Voilà pour le moteur. Qu'en est-il des spécifications en elles-mêmes ? Swagger Editor Next apporte deux capacités natives majeures. Premièrement, il supporte OpenAPI 3.1.0 out of the box. Cette version spécifique d'OpenAPI s'aligne parfaitement avec JSON Schema, ce qui veut dire que tu peux construire des modèles de données et des composants réutilisables bien plus complexes que ce que tu pouvais faire dans la version 3.0. Deuxièmement, Swagger Editor Next fait le rendu natif des spécifications AsyncAPI. C'est la voie à suivre définitive pour les développeurs qui gèrent des microservices event-driven en parallèle des API traditionnelles. AsyncAPI utilise une structure très similaire à OpenAPI, mais au lieu de définir des paths HTTP et des requêtes GET, il documente les message brokers, les topics et les événements asynchrones. Pour voir comment ça marche en pratique, regarde un réseau de smart city qui gère l'éclairage public. Si tu n'avais que des outils pour REST, tu pourrais essayer de forcer un endpoint HTTP POST pour représenter un flux continu de données de capteurs. Avec Swagger Editor Next, tu écris juste un document AsyncAPI. Tu définis un channel appelé smart-city-streetlights. Tu assignes Kafka comme protocole. Ensuite, tu spécifies une opération publish qui détaille la structure JSON exacte que le capteur émet quand une lumière s'allume. Pendant que tu tapes ta spécification sur le côté gauche de l'écran, Monaco Editor valide la syntaxe AsyncAPI. Sur le côté droit, l'interface fait le rendu d'un document visuel structuré et interactif. Il affiche clairement les topics Kafka, les payloads des messages attendus et les headers du protocole. Tu n'as plus besoin de toolchains séparées pour tes API synchrones et tes microservices event-driven. L'écosystème a évolué pour gérer les deux simultanément. Le passage aux événements asynchrones ne veut pas dire repartir de zéro avec ta documentation ; ça demande juste un éditeur moderne capable de lire ces nouveaux standards. Comme ça conclut notre série, prends un moment pour lire la documentation officielle, lance Swagger Editor Next, et essaie de modéliser un topic Kafka toi-même. Si tu as une idée pour une toute nouvelle série, visite devstories dot eu et dis-le-nous. C'est tout pour cette fois. À la prochaine !