[{"data":1,"prerenderedAt":3036},["ShallowReactive",2],{"/fr/architecture-craft/api-first-openapi-spring-boot":3,"search-api":-1},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"id":10,"date":11,"listed":12,"nocomments":6,"hidden":6,"categories":13,"tags":15,"--cover":18,"readingTime":19,"body":24,"_type":3030,"_id":3031,"_source":3032,"_file":3033,"_stem":3034,"_extension":3035},"/fr/architecture-craft/api-first-openapi-spring-boot","architecture-craft",false,"","API First, Avantages, Bonnes Pratiques et Intégration avec OpenAPI et Spring Boot","Découvrez les avantages de l'approche API First, comment utiliser OpenAPI pour documenter vos API et générer du code avec Spring Boot et Java. Guide complet avec...",54,"2024-08-20",true,[14],"architecture-logicielle-et-software-craftsmanship",[16,17],"Architecture logicielle","Software craftsmanship","covers/articles/principe-api-first.jpg",{"text":20,"minutes":21,"time":22,"words":23},"11 min read",10.58,634800,2116,{"type":25,"children":26,"toc":3008},"root",[27,36,42,55,74,92,96,103,114,121,126,132,143,149,163,169,174,180,185,188,206,212,229,235,240,589,634,640,645,680,686,704,709,896,2580,2587,2649,2654,2657,2663,2684,2690,2695,2701,2725,2730,2783,2789,2806,2812,2830,2836,2849,2852,2858,2878,2919,2936,2955,2968,2987,2999,3002],{"type":28,"tag":29,"props":30,"children":32},"element","h1",{"id":31},"découverte-du-concept-api-first-avec-openapi-et-spring-boot",[33],{"type":34,"value":35},"text","Découverte du concept API First avec OpenAPI et Spring Boot",{"type":28,"tag":37,"props":38,"children":39},"p",{},[40],{"type":34,"value":41},"Si vous avez déjà travaillé sur des projets logiciels où plusieurs équipes (front-end, back-end, gestion de produit) doivent collaborer étroitement, vous savez à quel point il peut être difficile de maintenir une cohérence entre les différentes parties du projet. Les API, qui permettent la communication entre ces composants, sont souvent développées en cours de route, après avoir déjà commencé à écrire le code. Résultat ? Des malentendus, des bugs inattendus et beaucoup de temps perdu en corrections.",{"type":28,"tag":37,"props":43,"children":44},{},[45,47,53],{"type":34,"value":46},"L'approche ",{"type":28,"tag":48,"props":49,"children":50},"strong",{},[51],{"type":34,"value":52},"API First",{"type":34,"value":54}," vient résoudre ce problème. Avec cette méthode, les API ne sont plus une réflexion après coup. Au contraire, elles deviennent l'élément central de votre projet. Plutôt que de commencer par écrire du code, vous commencez par définir, documenter et valider l'API avant même de coder. Cela permet d'aligner toutes les équipes dès le départ et d’éviter les incohérences.",{"type":28,"tag":37,"props":56,"children":57},{},[58,60,65,67,72],{"type":34,"value":59},"Je sais que vous vous demandez peut-être : \"Est-ce que cela complique le processus de développement ?\" Je comprends cette préoccupation, mais en réalité, API First simplifie la vie des développeurs à long terme. En utilisant des outils comme ",{"type":28,"tag":48,"props":61,"children":62},{},[63],{"type":34,"value":64},"OpenAPI",{"type":34,"value":66},", vous pouvez non seulement définir vos API de manière standardisée, mais aussi générer automatiquement du code pour votre projet ",{"type":28,"tag":48,"props":68,"children":69},{},[70],{"type":34,"value":71},"Spring Boot",{"type":34,"value":73},", ce qui vous fait gagner du temps précieux.",{"type":28,"tag":37,"props":75,"children":76},{},[77,79,83,85,90],{"type":34,"value":78},"Dans cet article, vous découvrirez comment l'approche API First, associée à ",{"type":28,"tag":48,"props":80,"children":81},{},[82],{"type":34,"value":71},{"type":34,"value":84}," et ",{"type":28,"tag":48,"props":86,"children":87},{},[88],{"type":34,"value":89},"Java",{"type":34,"value":91},", peut transformer votre manière de développer des logiciels. Je vous montrerai également des exemples concrets de spécifications OpenAPI et comment les utiliser dans un projet Java pour générer du code rapidement et efficacement. Vous repartirez avec une compréhension claire des avantages de cette approche et des bonnes pratiques pour l'adopter dans vos projets.",{"type":28,"tag":93,"props":94,"children":95},"hr",{},[],{"type":28,"tag":97,"props":98,"children":100},"h2",{"id":99},"les-avantages-dune-approche-api-first",[101],{"type":34,"value":102},"Les avantages d'une approche API First",{"type":28,"tag":37,"props":104,"children":105},{},[106,108,112],{"type":34,"value":107},"L’adoption d'une approche ",{"type":28,"tag":48,"props":109,"children":110},{},[111],{"type":34,"value":52},{"type":34,"value":113}," présente plusieurs avantages notables, en particulier pour les équipes travaillant sur des projets complexes avec des composants front-end et back-end distincts. Voici les principaux bénéfices que vous pouvez attendre de cette méthodologie :",{"type":28,"tag":115,"props":116,"children":118},"h3",{"id":117},"_1-amélioration-de-la-collaboration-inter-équipes",[119],{"type":34,"value":120},"1. Amélioration de la collaboration inter-équipes",{"type":28,"tag":37,"props":122,"children":123},{},[124],{"type":34,"value":125},"Quand vous développez une API après avoir commencé à coder, il arrive souvent que les équipes front-end et back-end ne soient pas synchronisées. Les développeurs front-end peuvent créer des interfaces qui ne correspondent pas aux services disponibles, et les développeurs back-end peuvent ajouter des fonctionnalités qui ne sont pas encore exploitées par le front-end. Avec l’approche API First, tout le monde part d'une spécification commune. Cela veut dire que dès le début du projet, toutes les équipes ont une vue claire de ce à quoi ressemblera l'API finale. Cela améliore la communication et permet aux équipes de travailler en parallèle sans surprises.",{"type":28,"tag":115,"props":127,"children":129},{"id":128},"_2-documentation-centralisée-dès-le-début",[130],{"type":34,"value":131},"2. Documentation centralisée dès le début",{"type":28,"tag":37,"props":133,"children":134},{},[135,137,141],{"type":34,"value":136},"L’un des gros points faibles des projets traditionnels est la documentation. Souvent, elle est écrite en fin de projet, quand tout est déjà en place – voire pas du tout. Avec API First, la spécification de l’API (généralement en utilisant un format comme ",{"type":28,"tag":48,"props":138,"children":139},{},[140],{"type":34,"value":64},{"type":34,"value":142},") devient la source de vérité. Elle est à la fois la documentation et le contrat entre les équipes. De plus, cette spécification est mise à jour tout au long du projet, ce qui signifie que tout changement dans l'API est immédiatement visible et répercuté. Cela élimine les mauvaises surprises et garantit que la documentation reste à jour en permanence.",{"type":28,"tag":115,"props":144,"children":146},{"id":145},"_3-réduction-des-erreurs-grâce-à-une-spécification-claire",[147],{"type":34,"value":148},"3. Réduction des erreurs grâce à une spécification claire",{"type":28,"tag":37,"props":150,"children":151},{},[152,154,161],{"type":34,"value":153},"Les erreurs dans la communication entre le front-end et le back-end sont courantes lorsque les API ne sont pas bien spécifiées ou changent en cours de route. Avec API First, ces erreurs sont réduites parce que tout est planifié et validé en amont. Chaque décision de conception d'API mérite d'être consignée dans un ",{"type":28,"tag":155,"props":156,"children":158},"a",{"href":157},"/fr/architecture-craft/adr-architecture-decision-record",[159],{"type":34,"value":160},"Architecture Decision Record",{"type":34,"value":162}," pour que le contexte reste accessible à toute l'équipe. Par exemple, vous pouvez valider la spécification de votre API avant de commencer à écrire du code, et des outils comme OpenAPI permettent même de générer automatiquement des tests pour vérifier que le comportement de l’API correspond bien à ce qui a été défini.",{"type":28,"tag":115,"props":164,"children":166},{"id":165},"_4-gains-de-temps-à-long-terme",[167],{"type":34,"value":168},"4. Gains de temps à long terme",{"type":28,"tag":37,"props":170,"children":171},{},[172],{"type":34,"value":173},"Même si cela peut sembler long de commencer par définir l’API, cela permet de gagner du temps à long terme. En ayant une API bien définie et validée avant de coder, vous minimisez le risque de bugs et de retours en arrière. De plus, la génération automatique de code à partir d’une spécification OpenAPI (illustré plus loin avec Spring Boot) permet de réduire le temps nécessaire pour écrire du code manuel et de se concentrer sur les fonctionnalités essentielles. J’ai observé ce gain concrètement dans des missions chez des grandes DSI du secteur bancaire : adopter l’OpenAPI Specification comme contrat d’équipe a réduit de moitié les allers-retours d’intégration entre les équipes front et back.",{"type":28,"tag":115,"props":175,"children":177},{"id":176},"_5-facilité-de-maintenance-et-dévolution",[178],{"type":34,"value":179},"5. Facilité de maintenance et d’évolution",{"type":28,"tag":37,"props":181,"children":182},{},[183],{"type":34,"value":184},"Une API bien documentée et centralisée permet de mieux anticiper les évolutions futures. Quand vient le moment de faire évoluer le projet, une API déjà définie vous permet de voir clairement quelles sont les parties à ajuster sans devoir tout redévelopper ou risquer de casser d’autres fonctionnalités.",{"type":28,"tag":93,"props":186,"children":187},{},[],{"type":28,"tag":189,"props":190,"children":195},"cta",{"cta":191,"href":192,"title":193,"type":194},"Réserver mon diagnostic gratuit →","https://app.kamanga.fr/forms/discovery-call","Vos équipes front et back se bloquent mutuellement en attendant les specs ?","call",[196,201],{"type":28,"tag":37,"props":197,"children":198},{},[199],{"type":34,"value":200},"Des semaines perdues en allers-retours, des sprints entiers engloutis dans des corrections d’intégration, et une frustration qui monte des deux côtés ? Quand les APIs ne sont pas pensées en amont, tout le monde subit.",{"type":28,"tag":37,"props":202,"children":203},{},[204],{"type":34,"value":205},"Réservons 30 minutes pour identifier précisément les frictions inter-équipes dans votre processus et définir une approche API First adaptée à votre contexte.",{"type":28,"tag":97,"props":207,"children":209},{"id":208},"openapi-le-standard-pour-api-first",[210],{"type":34,"value":211},"OpenAPI : Le standard pour API First",{"type":28,"tag":37,"props":213,"children":214},{},[215,217,221,223,227],{"type":34,"value":216},"L’un des piliers de l’approche ",{"type":28,"tag":48,"props":218,"children":219},{},[220],{"type":34,"value":52},{"type":34,"value":222}," est l’utilisation d’outils standardisés pour définir et documenter les API. Parmi ces outils, ",{"type":28,"tag":48,"props":224,"children":225},{},[226],{"type":34,"value":64},{"type":34,"value":228}," (anciennement connu sous le nom de Swagger) est sans doute le plus populaire et le plus utilisé dans l’industrie. OpenAPI permet de spécifier les API de manière claire et concise, en fournissant une description complète de chaque endpoint, des méthodes HTTP supportées, des paramètres, des types de réponse, et bien plus encore. Cette spécification devient le contrat sur lequel toutes les équipes s’alignent.",{"type":28,"tag":115,"props":230,"children":232},{"id":231},"_1-présentation-dopenapi",[233],{"type":34,"value":234},"1. Présentation d’OpenAPI",{"type":28,"tag":37,"props":236,"children":237},{},[238],{"type":34,"value":239},"OpenAPI est un format de fichier (souvent en JSON ou en YAML) qui décrit votre API. Voici un exemple simple d’une spécification OpenAPI pour un service de gestion d’utilisateurs :",{"type":28,"tag":241,"props":242,"children":246},"pre",{"className":243,"code":244,"language":245,"meta":7,"style":7},"language-yaml shiki shiki-themes catppuccin-frappe github-dark","openapi: 3.0.0\ninfo:\n  title: User Management API\n  version: 1.0.0\npaths:\n  /users:\n    get:\n      summary: Get a list of users\n      responses:\n        '200':\n          description: A JSON array of user objects\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    id:\n                      type: integer\n                    name:\n                      type: string\n","yaml",[247],{"type":28,"tag":248,"props":249,"children":250},"code",{"__ignoreMap":7},[251,275,289,308,326,339,352,365,383,396,409,427,440,453,466,484,497,515,528,541,559,572],{"type":28,"tag":252,"props":253,"children":256},"span",{"class":254,"line":255},"line",1,[257,263,269],{"type":28,"tag":252,"props":258,"children":260},{"style":259},"--shiki-default:#8CAAEE;--shiki-dark:#85E89D",[261],{"type":34,"value":262},"openapi",{"type":28,"tag":252,"props":264,"children":266},{"style":265},"--shiki-default:#81C8BE;--shiki-dark:#E1E4E8",[267],{"type":34,"value":268},":",{"type":28,"tag":252,"props":270,"children":272},{"style":271},"--shiki-default:#EF9F76;--shiki-dark:#79B8FF",[273],{"type":34,"value":274}," 3.0.0\n",{"type":28,"tag":252,"props":276,"children":278},{"class":254,"line":277},2,[279,284],{"type":28,"tag":252,"props":280,"children":281},{"style":259},[282],{"type":34,"value":283},"info",{"type":28,"tag":252,"props":285,"children":286},{"style":265},[287],{"type":34,"value":288},":\n",{"type":28,"tag":252,"props":290,"children":292},{"class":254,"line":291},3,[293,298,302],{"type":28,"tag":252,"props":294,"children":295},{"style":259},[296],{"type":34,"value":297},"  title",{"type":28,"tag":252,"props":299,"children":300},{"style":265},[301],{"type":34,"value":268},{"type":28,"tag":252,"props":303,"children":305},{"style":304},"--shiki-default:#A6D189;--shiki-dark:#9ECBFF",[306],{"type":34,"value":307}," User Management API\n",{"type":28,"tag":252,"props":309,"children":311},{"class":254,"line":310},4,[312,317,321],{"type":28,"tag":252,"props":313,"children":314},{"style":259},[315],{"type":34,"value":316},"  version",{"type":28,"tag":252,"props":318,"children":319},{"style":265},[320],{"type":34,"value":268},{"type":28,"tag":252,"props":322,"children":323},{"style":271},[324],{"type":34,"value":325}," 1.0.0\n",{"type":28,"tag":252,"props":327,"children":329},{"class":254,"line":328},5,[330,335],{"type":28,"tag":252,"props":331,"children":332},{"style":259},[333],{"type":34,"value":334},"paths",{"type":28,"tag":252,"props":336,"children":337},{"style":265},[338],{"type":34,"value":288},{"type":28,"tag":252,"props":340,"children":342},{"class":254,"line":341},6,[343,348],{"type":28,"tag":252,"props":344,"children":345},{"style":259},[346],{"type":34,"value":347},"  /users",{"type":28,"tag":252,"props":349,"children":350},{"style":265},[351],{"type":34,"value":288},{"type":28,"tag":252,"props":353,"children":355},{"class":254,"line":354},7,[356,361],{"type":28,"tag":252,"props":357,"children":358},{"style":259},[359],{"type":34,"value":360},"    get",{"type":28,"tag":252,"props":362,"children":363},{"style":265},[364],{"type":34,"value":288},{"type":28,"tag":252,"props":366,"children":368},{"class":254,"line":367},8,[369,374,378],{"type":28,"tag":252,"props":370,"children":371},{"style":259},[372],{"type":34,"value":373},"      summary",{"type":28,"tag":252,"props":375,"children":376},{"style":265},[377],{"type":34,"value":268},{"type":28,"tag":252,"props":379,"children":380},{"style":304},[381],{"type":34,"value":382}," Get a list of users\n",{"type":28,"tag":252,"props":384,"children":386},{"class":254,"line":385},9,[387,392],{"type":28,"tag":252,"props":388,"children":389},{"style":259},[390],{"type":34,"value":391},"      responses",{"type":28,"tag":252,"props":393,"children":394},{"style":265},[395],{"type":34,"value":288},{"type":28,"tag":252,"props":397,"children":399},{"class":254,"line":398},10,[400,405],{"type":28,"tag":252,"props":401,"children":402},{"style":304},[403],{"type":34,"value":404},"        '200'",{"type":28,"tag":252,"props":406,"children":407},{"style":265},[408],{"type":34,"value":288},{"type":28,"tag":252,"props":410,"children":412},{"class":254,"line":411},11,[413,418,422],{"type":28,"tag":252,"props":414,"children":415},{"style":259},[416],{"type":34,"value":417},"          description",{"type":28,"tag":252,"props":419,"children":420},{"style":265},[421],{"type":34,"value":268},{"type":28,"tag":252,"props":423,"children":424},{"style":304},[425],{"type":34,"value":426}," A JSON array of user objects\n",{"type":28,"tag":252,"props":428,"children":430},{"class":254,"line":429},12,[431,436],{"type":28,"tag":252,"props":432,"children":433},{"style":259},[434],{"type":34,"value":435},"          content",{"type":28,"tag":252,"props":437,"children":438},{"style":265},[439],{"type":34,"value":288},{"type":28,"tag":252,"props":441,"children":443},{"class":254,"line":442},13,[444,449],{"type":28,"tag":252,"props":445,"children":446},{"style":259},[447],{"type":34,"value":448},"            application/json",{"type":28,"tag":252,"props":450,"children":451},{"style":265},[452],{"type":34,"value":288},{"type":28,"tag":252,"props":454,"children":456},{"class":254,"line":455},14,[457,462],{"type":28,"tag":252,"props":458,"children":459},{"style":259},[460],{"type":34,"value":461},"              schema",{"type":28,"tag":252,"props":463,"children":464},{"style":265},[465],{"type":34,"value":288},{"type":28,"tag":252,"props":467,"children":469},{"class":254,"line":468},15,[470,475,479],{"type":28,"tag":252,"props":471,"children":472},{"style":259},[473],{"type":34,"value":474},"                type",{"type":28,"tag":252,"props":476,"children":477},{"style":265},[478],{"type":34,"value":268},{"type":28,"tag":252,"props":480,"children":481},{"style":304},[482],{"type":34,"value":483}," array\n",{"type":28,"tag":252,"props":485,"children":487},{"class":254,"line":486},16,[488,493],{"type":28,"tag":252,"props":489,"children":490},{"style":259},[491],{"type":34,"value":492},"                items",{"type":28,"tag":252,"props":494,"children":495},{"style":265},[496],{"type":34,"value":288},{"type":28,"tag":252,"props":498,"children":500},{"class":254,"line":499},17,[501,506,510],{"type":28,"tag":252,"props":502,"children":503},{"style":259},[504],{"type":34,"value":505},"                  type",{"type":28,"tag":252,"props":507,"children":508},{"style":265},[509],{"type":34,"value":268},{"type":28,"tag":252,"props":511,"children":512},{"style":304},[513],{"type":34,"value":514}," object\n",{"type":28,"tag":252,"props":516,"children":518},{"class":254,"line":517},18,[519,524],{"type":28,"tag":252,"props":520,"children":521},{"style":259},[522],{"type":34,"value":523},"                  properties",{"type":28,"tag":252,"props":525,"children":526},{"style":265},[527],{"type":34,"value":288},{"type":28,"tag":252,"props":529,"children":531},{"class":254,"line":530},19,[532,537],{"type":28,"tag":252,"props":533,"children":534},{"style":259},[535],{"type":34,"value":536},"                    id",{"type":28,"tag":252,"props":538,"children":539},{"style":265},[540],{"type":34,"value":288},{"type":28,"tag":252,"props":542,"children":544},{"class":254,"line":543},20,[545,550,554],{"type":28,"tag":252,"props":546,"children":547},{"style":259},[548],{"type":34,"value":549},"                      type",{"type":28,"tag":252,"props":551,"children":552},{"style":265},[553],{"type":34,"value":268},{"type":28,"tag":252,"props":555,"children":556},{"style":304},[557],{"type":34,"value":558}," integer\n",{"type":28,"tag":252,"props":560,"children":562},{"class":254,"line":561},21,[563,568],{"type":28,"tag":252,"props":564,"children":565},{"style":259},[566],{"type":34,"value":567},"                    name",{"type":28,"tag":252,"props":569,"children":570},{"style":265},[571],{"type":34,"value":288},{"type":28,"tag":252,"props":573,"children":575},{"class":254,"line":574},22,[576,580,584],{"type":28,"tag":252,"props":577,"children":578},{"style":259},[579],{"type":34,"value":549},{"type":28,"tag":252,"props":581,"children":582},{"style":265},[583],{"type":34,"value":268},{"type":28,"tag":252,"props":585,"children":586},{"style":304},[587],{"type":34,"value":588}," string\n",{"type":28,"tag":37,"props":590,"children":591},{},[592,594,600,602,608,610,616,618,624,626,632],{"type":34,"value":593},"Dans cet exemple, nous avons une API qui gère une collection d’utilisateurs avec un endpoint ",{"type":28,"tag":248,"props":595,"children":597},{"className":596},[],[598],{"type":34,"value":599},"/users",{"type":34,"value":601}," qui retourne une liste d’utilisateurs en JSON. La spécification définit les types de données (comme ",{"type":28,"tag":248,"props":603,"children":605},{"className":604},[],[606],{"type":34,"value":607},"integer",{"type":34,"value":609}," ou ",{"type":28,"tag":248,"props":611,"children":613},{"className":612},[],[614],{"type":34,"value":615},"string",{"type":34,"value":617},"), les méthodes HTTP (ici ",{"type":28,"tag":248,"props":619,"children":621},{"className":620},[],[622],{"type":34,"value":623},"GET",{"type":34,"value":625},"), ainsi que les réponses possibles (un code HTTP ",{"type":28,"tag":248,"props":627,"children":629},{"className":628},[],[630],{"type":34,"value":631},"200",{"type":34,"value":633}," pour indiquer une réponse réussie).",{"type":28,"tag":115,"props":635,"children":637},{"id":636},"_2-avantages-dopenapi-dans-lapproche-api-first",[638],{"type":34,"value":639},"2. Avantages d'OpenAPI dans l'approche API First",{"type":28,"tag":37,"props":641,"children":642},{},[643],{"type":34,"value":644},"L’utilisation d’OpenAPI dans une approche API First présente plusieurs avantages :",{"type":28,"tag":646,"props":647,"children":648},"ul",{},[649,660,670],{"type":28,"tag":650,"props":651,"children":652},"li",{},[653,658],{"type":28,"tag":48,"props":654,"children":655},{},[656],{"type":34,"value":657},"Clarté et transparence",{"type":34,"value":659}," : La spécification sert de documentation unique et centralisée que toutes les équipes peuvent consulter.",{"type":28,"tag":650,"props":661,"children":662},{},[663,668],{"type":28,"tag":48,"props":664,"children":665},{},[666],{"type":34,"value":667},"Validations automatiques",{"type":34,"value":669}," : Des outils existent pour valider que les appels à l’API respectent la spécification.",{"type":28,"tag":650,"props":671,"children":672},{},[673,678],{"type":28,"tag":48,"props":674,"children":675},{},[676],{"type":34,"value":677},"Génération de code",{"type":34,"value":679}," : OpenAPI permet de générer automatiquement du code pour plusieurs langages, ce qui accélère le développement.",{"type":28,"tag":115,"props":681,"children":683},{"id":682},"_3-utilisation-dopenapi-dans-un-projet-spring-boot",[684],{"type":34,"value":685},"3. Utilisation d’OpenAPI dans un projet Spring Boot",{"type":28,"tag":37,"props":687,"children":688},{},[689,691,695,697,702],{"type":34,"value":690},"Intégrer ",{"type":28,"tag":48,"props":692,"children":693},{},[694],{"type":34,"value":64},{"type":34,"value":696}," dans un projet Spring Boot est simple grâce à des bibliothèques comme ",{"type":28,"tag":48,"props":698,"children":699},{},[700],{"type":34,"value":701},"springdoc-openapi",{"type":34,"value":703},", qui génèrent automatiquement une spécification OpenAPI à partir de votre code Java.",{"type":28,"tag":37,"props":705,"children":706},{},[707],{"type":34,"value":708},"Voici comment configurer Spring Boot pour générer une documentation OpenAPI :",{"type":28,"tag":710,"props":711,"children":712},"ol",{},[713,871,884],{"type":28,"tag":650,"props":714,"children":715},{},[716,718,724,726],{"type":34,"value":717},"Ajoutez la dépendance suivante à votre fichier ",{"type":28,"tag":248,"props":719,"children":721},{"className":720},[],[722],{"type":34,"value":723},"pom.xml",{"type":34,"value":725}," :",{"type":28,"tag":241,"props":727,"children":731},{"className":728,"code":729,"language":730,"meta":7,"style":7},"language-xml shiki shiki-themes catppuccin-frappe github-dark","\u003Cdependency>\n    \u003CgroupId>org.springdoc\u003C/groupId>\n    \u003CartifactId>springdoc-openapi-ui\u003C/artifactId>\n    \u003Cversion>1.5.12\u003C/version>\n\u003C/dependency>\n","xml",[732],{"type":28,"tag":248,"props":733,"children":734},{"__ignoreMap":7},[735,753,790,823,856],{"type":28,"tag":252,"props":736,"children":737},{"class":254,"line":255},[738,743,748],{"type":28,"tag":252,"props":739,"children":740},{"style":265},[741],{"type":34,"value":742},"\u003C",{"type":28,"tag":252,"props":744,"children":745},{"style":259},[746],{"type":34,"value":747},"dependency",{"type":28,"tag":252,"props":749,"children":750},{"style":265},[751],{"type":34,"value":752},">\n",{"type":28,"tag":252,"props":754,"children":755},{"class":254,"line":277},[756,761,766,771,777,782,786],{"type":28,"tag":252,"props":757,"children":758},{"style":265},[759],{"type":34,"value":760},"    \u003C",{"type":28,"tag":252,"props":762,"children":763},{"style":259},[764],{"type":34,"value":765},"groupId",{"type":28,"tag":252,"props":767,"children":768},{"style":265},[769],{"type":34,"value":770},">",{"type":28,"tag":252,"props":772,"children":774},{"style":773},"--shiki-default:#C6D0F5;--shiki-dark:#E1E4E8",[775],{"type":34,"value":776},"org.springdoc",{"type":28,"tag":252,"props":778,"children":779},{"style":265},[780],{"type":34,"value":781},"\u003C/",{"type":28,"tag":252,"props":783,"children":784},{"style":259},[785],{"type":34,"value":765},{"type":28,"tag":252,"props":787,"children":788},{"style":265},[789],{"type":34,"value":752},{"type":28,"tag":252,"props":791,"children":792},{"class":254,"line":291},[793,797,802,806,811,815,819],{"type":28,"tag":252,"props":794,"children":795},{"style":265},[796],{"type":34,"value":760},{"type":28,"tag":252,"props":798,"children":799},{"style":259},[800],{"type":34,"value":801},"artifactId",{"type":28,"tag":252,"props":803,"children":804},{"style":265},[805],{"type":34,"value":770},{"type":28,"tag":252,"props":807,"children":808},{"style":773},[809],{"type":34,"value":810},"springdoc-openapi-ui",{"type":28,"tag":252,"props":812,"children":813},{"style":265},[814],{"type":34,"value":781},{"type":28,"tag":252,"props":816,"children":817},{"style":259},[818],{"type":34,"value":801},{"type":28,"tag":252,"props":820,"children":821},{"style":265},[822],{"type":34,"value":752},{"type":28,"tag":252,"props":824,"children":825},{"class":254,"line":310},[826,830,835,839,844,848,852],{"type":28,"tag":252,"props":827,"children":828},{"style":265},[829],{"type":34,"value":760},{"type":28,"tag":252,"props":831,"children":832},{"style":259},[833],{"type":34,"value":834},"version",{"type":28,"tag":252,"props":836,"children":837},{"style":265},[838],{"type":34,"value":770},{"type":28,"tag":252,"props":840,"children":841},{"style":773},[842],{"type":34,"value":843},"1.5.12",{"type":28,"tag":252,"props":845,"children":846},{"style":265},[847],{"type":34,"value":781},{"type":28,"tag":252,"props":849,"children":850},{"style":259},[851],{"type":34,"value":834},{"type":28,"tag":252,"props":853,"children":854},{"style":265},[855],{"type":34,"value":752},{"type":28,"tag":252,"props":857,"children":858},{"class":254,"line":328},[859,863,867],{"type":28,"tag":252,"props":860,"children":861},{"style":265},[862],{"type":34,"value":781},{"type":28,"tag":252,"props":864,"children":865},{"style":259},[866],{"type":34,"value":747},{"type":28,"tag":252,"props":868,"children":869},{"style":265},[870],{"type":34,"value":752},{"type":28,"tag":650,"props":872,"children":873},{},[874,876,882],{"type":34,"value":875},"Ensuite, lancez votre projet Spring Boot. Cela générera automatiquement une interface Swagger disponible à l’URL suivante : ",{"type":28,"tag":248,"props":877,"children":879},{"className":878},[],[880],{"type":34,"value":881},"http://localhost:8080/swagger-ui.html",{"type":34,"value":883},".",{"type":28,"tag":650,"props":885,"children":886},{},[887,889,894],{"type":34,"value":888},"Voici un exemple de contrôleur Spring Boot qui est automatiquement documenté par OpenAPI avec des annotations ",{"type":28,"tag":48,"props":890,"children":891},{},[892],{"type":34,"value":893},"Swagger",{"type":34,"value":895}," pour enrichir la documentation :",{"type":28,"tag":241,"props":897,"children":901},{"className":898,"code":899,"language":900,"meta":7,"style":7},"language-java shiki shiki-themes catppuccin-frappe github-dark","import io.swagger.v3.oas.annotations.Operation;\nimport io.swagger.v3.oas.annotations.media.Content;\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport io.swagger.v3.oas.annotations.responses.ApiResponse;\nimport io.swagger.v3.oas.annotations.responses.ApiResponses;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\n@RestController\n@RequestMapping(\"/api/users\")\npublic class UserController {\n\n    @Operation(summary = \"Obtenir la liste des utilisateurs\")\n    @ApiResponses(value = {\n        @ApiResponse(responseCode = \"200\", description = \"Liste des utilisateurs trouvée\",\n            content = { @Content(mediaType = \"application/json\",\n            schema = @Schema(implementation = User.class)) }),\n        @ApiResponse(responseCode = \"400\", description = \"Requête invalide\",\n            content = @Content),\n        @ApiResponse(responseCode = \"404\", description = \"Utilisateurs non trouvés\",\n            content = @Content) })\n    @GetMapping\n    public List\u003CUser> getUsers() {\n        // Simuler une liste d'utilisateurs\n        return List.of(new User(1, \"Alice\"), new User(2, \"Bob\"));\n    }\n\n}\n\nclass User {\n    private int id;\n    private String name;\n\n    public User(int id, String name) {\n        this.id = id\n\n;\n        this.name = name;\n    }\n\n    // Getters et setters\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n","java",[902],{"type":28,"tag":248,"props":903,"children":904},{"__ignoreMap":7},[905,970,1035,1099,1164,1228,1289,1345,1401,1409,1443,1450,1465,1491,1515,1522,1559,1587,1641,1689,1746,1795,1819,1869,1899,1912,1955,1965,2055,2064,2072,2081,2089,2105,2128,2150,2158,2204,2233,2241,2249,2278,2286,2294,2303,2328,2344,2352,2360,2398,2426,2434,2442,2467,2482,2490,2498,2536,2564,2572],{"type":28,"tag":252,"props":906,"children":907},{"class":254,"line":255},[908,914,919,924,929,933,938,942,947,951,956,960,965],{"type":28,"tag":252,"props":909,"children":911},{"style":910},"--shiki-default:#CA9EE6;--shiki-dark:#F97583",[912],{"type":34,"value":913},"import",{"type":28,"tag":252,"props":915,"children":916},{"style":773},[917],{"type":34,"value":918}," io",{"type":28,"tag":252,"props":920,"children":922},{"style":921},"--shiki-default:#949CBB;--shiki-dark:#E1E4E8",[923],{"type":34,"value":883},{"type":28,"tag":252,"props":925,"children":926},{"style":773},[927],{"type":34,"value":928},"swagger",{"type":28,"tag":252,"props":930,"children":931},{"style":921},[932],{"type":34,"value":883},{"type":28,"tag":252,"props":934,"children":935},{"style":773},[936],{"type":34,"value":937},"v3",{"type":28,"tag":252,"props":939,"children":940},{"style":921},[941],{"type":34,"value":883},{"type":28,"tag":252,"props":943,"children":944},{"style":773},[945],{"type":34,"value":946},"oas",{"type":28,"tag":252,"props":948,"children":949},{"style":921},[950],{"type":34,"value":883},{"type":28,"tag":252,"props":952,"children":953},{"style":773},[954],{"type":34,"value":955},"annotations",{"type":28,"tag":252,"props":957,"children":958},{"style":921},[959],{"type":34,"value":883},{"type":28,"tag":252,"props":961,"children":962},{"style":773},[963],{"type":34,"value":964},"Operation",{"type":28,"tag":252,"props":966,"children":967},{"style":921},[968],{"type":34,"value":969},";\n",{"type":28,"tag":252,"props":971,"children":972},{"class":254,"line":277},[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1022,1026,1031],{"type":28,"tag":252,"props":974,"children":975},{"style":910},[976],{"type":34,"value":913},{"type":28,"tag":252,"props":978,"children":979},{"style":773},[980],{"type":34,"value":918},{"type":28,"tag":252,"props":982,"children":983},{"style":921},[984],{"type":34,"value":883},{"type":28,"tag":252,"props":986,"children":987},{"style":773},[988],{"type":34,"value":928},{"type":28,"tag":252,"props":990,"children":991},{"style":921},[992],{"type":34,"value":883},{"type":28,"tag":252,"props":994,"children":995},{"style":773},[996],{"type":34,"value":937},{"type":28,"tag":252,"props":998,"children":999},{"style":921},[1000],{"type":34,"value":883},{"type":28,"tag":252,"props":1002,"children":1003},{"style":773},[1004],{"type":34,"value":946},{"type":28,"tag":252,"props":1006,"children":1007},{"style":921},[1008],{"type":34,"value":883},{"type":28,"tag":252,"props":1010,"children":1011},{"style":773},[1012],{"type":34,"value":955},{"type":28,"tag":252,"props":1014,"children":1015},{"style":921},[1016],{"type":34,"value":883},{"type":28,"tag":252,"props":1018,"children":1019},{"style":773},[1020],{"type":34,"value":1021},"media",{"type":28,"tag":252,"props":1023,"children":1024},{"style":921},[1025],{"type":34,"value":883},{"type":28,"tag":252,"props":1027,"children":1028},{"style":773},[1029],{"type":34,"value":1030},"Content",{"type":28,"tag":252,"props":1032,"children":1033},{"style":921},[1034],{"type":34,"value":969},{"type":28,"tag":252,"props":1036,"children":1037},{"class":254,"line":291},[1038,1042,1046,1050,1054,1058,1062,1066,1070,1074,1078,1082,1086,1090,1095],{"type":28,"tag":252,"props":1039,"children":1040},{"style":910},[1041],{"type":34,"value":913},{"type":28,"tag":252,"props":1043,"children":1044},{"style":773},[1045],{"type":34,"value":918},{"type":28,"tag":252,"props":1047,"children":1048},{"style":921},[1049],{"type":34,"value":883},{"type":28,"tag":252,"props":1051,"children":1052},{"style":773},[1053],{"type":34,"value":928},{"type":28,"tag":252,"props":1055,"children":1056},{"style":921},[1057],{"type":34,"value":883},{"type":28,"tag":252,"props":1059,"children":1060},{"style":773},[1061],{"type":34,"value":937},{"type":28,"tag":252,"props":1063,"children":1064},{"style":921},[1065],{"type":34,"value":883},{"type":28,"tag":252,"props":1067,"children":1068},{"style":773},[1069],{"type":34,"value":946},{"type":28,"tag":252,"props":1071,"children":1072},{"style":921},[1073],{"type":34,"value":883},{"type":28,"tag":252,"props":1075,"children":1076},{"style":773},[1077],{"type":34,"value":955},{"type":28,"tag":252,"props":1079,"children":1080},{"style":921},[1081],{"type":34,"value":883},{"type":28,"tag":252,"props":1083,"children":1084},{"style":773},[1085],{"type":34,"value":1021},{"type":28,"tag":252,"props":1087,"children":1088},{"style":921},[1089],{"type":34,"value":883},{"type":28,"tag":252,"props":1091,"children":1092},{"style":773},[1093],{"type":34,"value":1094},"Schema",{"type":28,"tag":252,"props":1096,"children":1097},{"style":921},[1098],{"type":34,"value":969},{"type":28,"tag":252,"props":1100,"children":1101},{"class":254,"line":310},[1102,1106,1110,1114,1118,1122,1126,1130,1134,1138,1142,1146,1151,1155,1160],{"type":28,"tag":252,"props":1103,"children":1104},{"style":910},[1105],{"type":34,"value":913},{"type":28,"tag":252,"props":1107,"children":1108},{"style":773},[1109],{"type":34,"value":918},{"type":28,"tag":252,"props":1111,"children":1112},{"style":921},[1113],{"type":34,"value":883},{"type":28,"tag":252,"props":1115,"children":1116},{"style":773},[1117],{"type":34,"value":928},{"type":28,"tag":252,"props":1119,"children":1120},{"style":921},[1121],{"type":34,"value":883},{"type":28,"tag":252,"props":1123,"children":1124},{"style":773},[1125],{"type":34,"value":937},{"type":28,"tag":252,"props":1127,"children":1128},{"style":921},[1129],{"type":34,"value":883},{"type":28,"tag":252,"props":1131,"children":1132},{"style":773},[1133],{"type":34,"value":946},{"type":28,"tag":252,"props":1135,"children":1136},{"style":921},[1137],{"type":34,"value":883},{"type":28,"tag":252,"props":1139,"children":1140},{"style":773},[1141],{"type":34,"value":955},{"type":28,"tag":252,"props":1143,"children":1144},{"style":921},[1145],{"type":34,"value":883},{"type":28,"tag":252,"props":1147,"children":1148},{"style":773},[1149],{"type":34,"value":1150},"responses",{"type":28,"tag":252,"props":1152,"children":1153},{"style":921},[1154],{"type":34,"value":883},{"type":28,"tag":252,"props":1156,"children":1157},{"style":773},[1158],{"type":34,"value":1159},"ApiResponse",{"type":28,"tag":252,"props":1161,"children":1162},{"style":921},[1163],{"type":34,"value":969},{"type":28,"tag":252,"props":1165,"children":1166},{"class":254,"line":328},[1167,1171,1175,1179,1183,1187,1191,1195,1199,1203,1207,1211,1215,1219,1224],{"type":28,"tag":252,"props":1168,"children":1169},{"style":910},[1170],{"type":34,"value":913},{"type":28,"tag":252,"props":1172,"children":1173},{"style":773},[1174],{"type":34,"value":918},{"type":28,"tag":252,"props":1176,"children":1177},{"style":921},[1178],{"type":34,"value":883},{"type":28,"tag":252,"props":1180,"children":1181},{"style":773},[1182],{"type":34,"value":928},{"type":28,"tag":252,"props":1184,"children":1185},{"style":921},[1186],{"type":34,"value":883},{"type":28,"tag":252,"props":1188,"children":1189},{"style":773},[1190],{"type":34,"value":937},{"type":28,"tag":252,"props":1192,"children":1193},{"style":921},[1194],{"type":34,"value":883},{"type":28,"tag":252,"props":1196,"children":1197},{"style":773},[1198],{"type":34,"value":946},{"type":28,"tag":252,"props":1200,"children":1201},{"style":921},[1202],{"type":34,"value":883},{"type":28,"tag":252,"props":1204,"children":1205},{"style":773},[1206],{"type":34,"value":955},{"type":28,"tag":252,"props":1208,"children":1209},{"style":921},[1210],{"type":34,"value":883},{"type":28,"tag":252,"props":1212,"children":1213},{"style":773},[1214],{"type":34,"value":1150},{"type":28,"tag":252,"props":1216,"children":1217},{"style":921},[1218],{"type":34,"value":883},{"type":28,"tag":252,"props":1220,"children":1221},{"style":773},[1222],{"type":34,"value":1223},"ApiResponses",{"type":28,"tag":252,"props":1225,"children":1226},{"style":921},[1227],{"type":34,"value":969},{"type":28,"tag":252,"props":1229,"children":1230},{"class":254,"line":341},[1231,1235,1240,1244,1249,1253,1258,1262,1267,1271,1276,1280,1285],{"type":28,"tag":252,"props":1232,"children":1233},{"style":910},[1234],{"type":34,"value":913},{"type":28,"tag":252,"props":1236,"children":1237},{"style":773},[1238],{"type":34,"value":1239}," org",{"type":28,"tag":252,"props":1241,"children":1242},{"style":921},[1243],{"type":34,"value":883},{"type":28,"tag":252,"props":1245,"children":1246},{"style":773},[1247],{"type":34,"value":1248},"springframework",{"type":28,"tag":252,"props":1250,"children":1251},{"style":921},[1252],{"type":34,"value":883},{"type":28,"tag":252,"props":1254,"children":1255},{"style":773},[1256],{"type":34,"value":1257},"web",{"type":28,"tag":252,"props":1259,"children":1260},{"style":921},[1261],{"type":34,"value":883},{"type":28,"tag":252,"props":1263,"children":1264},{"style":773},[1265],{"type":34,"value":1266},"bind",{"type":28,"tag":252,"props":1268,"children":1269},{"style":921},[1270],{"type":34,"value":883},{"type":28,"tag":252,"props":1272,"children":1273},{"style":773},[1274],{"type":34,"value":1275},"annotation",{"type":28,"tag":252,"props":1277,"children":1278},{"style":921},[1279],{"type":34,"value":883},{"type":28,"tag":252,"props":1281,"children":1282},{"style":773},[1283],{"type":34,"value":1284},"GetMapping",{"type":28,"tag":252,"props":1286,"children":1287},{"style":921},[1288],{"type":34,"value":969},{"type":28,"tag":252,"props":1290,"children":1291},{"class":254,"line":354},[1292,1296,1300,1304,1308,1312,1316,1320,1324,1328,1332,1336,1341],{"type":28,"tag":252,"props":1293,"children":1294},{"style":910},[1295],{"type":34,"value":913},{"type":28,"tag":252,"props":1297,"children":1298},{"style":773},[1299],{"type":34,"value":1239},{"type":28,"tag":252,"props":1301,"children":1302},{"style":921},[1303],{"type":34,"value":883},{"type":28,"tag":252,"props":1305,"children":1306},{"style":773},[1307],{"type":34,"value":1248},{"type":28,"tag":252,"props":1309,"children":1310},{"style":921},[1311],{"type":34,"value":883},{"type":28,"tag":252,"props":1313,"children":1314},{"style":773},[1315],{"type":34,"value":1257},{"type":28,"tag":252,"props":1317,"children":1318},{"style":921},[1319],{"type":34,"value":883},{"type":28,"tag":252,"props":1321,"children":1322},{"style":773},[1323],{"type":34,"value":1266},{"type":28,"tag":252,"props":1325,"children":1326},{"style":921},[1327],{"type":34,"value":883},{"type":28,"tag":252,"props":1329,"children":1330},{"style":773},[1331],{"type":34,"value":1275},{"type":28,"tag":252,"props":1333,"children":1334},{"style":921},[1335],{"type":34,"value":883},{"type":28,"tag":252,"props":1337,"children":1338},{"style":773},[1339],{"type":34,"value":1340},"RequestMapping",{"type":28,"tag":252,"props":1342,"children":1343},{"style":921},[1344],{"type":34,"value":969},{"type":28,"tag":252,"props":1346,"children":1347},{"class":254,"line":367},[1348,1352,1356,1360,1364,1368,1372,1376,1380,1384,1388,1392,1397],{"type":28,"tag":252,"props":1349,"children":1350},{"style":910},[1351],{"type":34,"value":913},{"type":28,"tag":252,"props":1353,"children":1354},{"style":773},[1355],{"type":34,"value":1239},{"type":28,"tag":252,"props":1357,"children":1358},{"style":921},[1359],{"type":34,"value":883},{"type":28,"tag":252,"props":1361,"children":1362},{"style":773},[1363],{"type":34,"value":1248},{"type":28,"tag":252,"props":1365,"children":1366},{"style":921},[1367],{"type":34,"value":883},{"type":28,"tag":252,"props":1369,"children":1370},{"style":773},[1371],{"type":34,"value":1257},{"type":28,"tag":252,"props":1373,"children":1374},{"style":921},[1375],{"type":34,"value":883},{"type":28,"tag":252,"props":1377,"children":1378},{"style":773},[1379],{"type":34,"value":1266},{"type":28,"tag":252,"props":1381,"children":1382},{"style":921},[1383],{"type":34,"value":883},{"type":28,"tag":252,"props":1385,"children":1386},{"style":773},[1387],{"type":34,"value":1275},{"type":28,"tag":252,"props":1389,"children":1390},{"style":921},[1391],{"type":34,"value":883},{"type":28,"tag":252,"props":1393,"children":1394},{"style":773},[1395],{"type":34,"value":1396},"RestController",{"type":28,"tag":252,"props":1398,"children":1399},{"style":921},[1400],{"type":34,"value":969},{"type":28,"tag":252,"props":1402,"children":1403},{"class":254,"line":385},[1404],{"type":28,"tag":252,"props":1405,"children":1406},{"emptyLinePlaceholder":12},[1407],{"type":34,"value":1408},"\n",{"type":28,"tag":252,"props":1410,"children":1411},{"class":254,"line":398},[1412,1416,1421,1425,1430,1434,1439],{"type":28,"tag":252,"props":1413,"children":1414},{"style":910},[1415],{"type":34,"value":913},{"type":28,"tag":252,"props":1417,"children":1418},{"style":773},[1419],{"type":34,"value":1420}," java",{"type":28,"tag":252,"props":1422,"children":1423},{"style":921},[1424],{"type":34,"value":883},{"type":28,"tag":252,"props":1426,"children":1427},{"style":773},[1428],{"type":34,"value":1429},"util",{"type":28,"tag":252,"props":1431,"children":1432},{"style":921},[1433],{"type":34,"value":883},{"type":28,"tag":252,"props":1435,"children":1436},{"style":773},[1437],{"type":34,"value":1438},"List",{"type":28,"tag":252,"props":1440,"children":1441},{"style":921},[1442],{"type":34,"value":969},{"type":28,"tag":252,"props":1444,"children":1445},{"class":254,"line":411},[1446],{"type":28,"tag":252,"props":1447,"children":1448},{"emptyLinePlaceholder":12},[1449],{"type":34,"value":1408},{"type":28,"tag":252,"props":1451,"children":1452},{"class":254,"line":429},[1453,1459],{"type":28,"tag":252,"props":1454,"children":1456},{"style":1455},"--shiki-default:#EF9F76;--shiki-dark:#E1E4E8",[1457],{"type":34,"value":1458},"@",{"type":28,"tag":252,"props":1460,"children":1462},{"style":1461},"--shiki-default:#EF9F76;--shiki-dark:#F97583",[1463],{"type":34,"value":1464},"RestController\n",{"type":28,"tag":252,"props":1466,"children":1467},{"class":254,"line":442},[1468,1472,1476,1481,1486],{"type":28,"tag":252,"props":1469,"children":1470},{"style":1455},[1471],{"type":34,"value":1458},{"type":28,"tag":252,"props":1473,"children":1474},{"style":1461},[1475],{"type":34,"value":1340},{"type":28,"tag":252,"props":1477,"children":1478},{"style":921},[1479],{"type":34,"value":1480},"(",{"type":28,"tag":252,"props":1482,"children":1483},{"style":304},[1484],{"type":34,"value":1485},"\"/api/users\"",{"type":28,"tag":252,"props":1487,"children":1488},{"style":921},[1489],{"type":34,"value":1490},")\n",{"type":28,"tag":252,"props":1492,"children":1493},{"class":254,"line":455},[1494,1499,1504,1510],{"type":28,"tag":252,"props":1495,"children":1496},{"style":910},[1497],{"type":34,"value":1498},"public",{"type":28,"tag":252,"props":1500,"children":1501},{"style":910},[1502],{"type":34,"value":1503}," class",{"type":28,"tag":252,"props":1505,"children":1507},{"style":1506},"--shiki-default:#E5C890;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[1508],{"type":34,"value":1509}," UserController",{"type":28,"tag":252,"props":1511,"children":1512},{"style":921},[1513],{"type":34,"value":1514}," {\n",{"type":28,"tag":252,"props":1516,"children":1517},{"class":254,"line":468},[1518],{"type":28,"tag":252,"props":1519,"children":1520},{"emptyLinePlaceholder":12},[1521],{"type":34,"value":1408},{"type":28,"tag":252,"props":1523,"children":1524},{"class":254,"line":486},[1525,1530,1534,1538,1544,1550,1555],{"type":28,"tag":252,"props":1526,"children":1527},{"style":1455},[1528],{"type":34,"value":1529},"    @",{"type":28,"tag":252,"props":1531,"children":1532},{"style":1461},[1533],{"type":34,"value":964},{"type":28,"tag":252,"props":1535,"children":1536},{"style":921},[1537],{"type":34,"value":1480},{"type":28,"tag":252,"props":1539,"children":1541},{"style":1540},"--shiki-default:#C6D0F5;--shiki-dark:#79B8FF",[1542],{"type":34,"value":1543},"summary",{"type":28,"tag":252,"props":1545,"children":1547},{"style":1546},"--shiki-default:#81C8BE;--shiki-dark:#F97583",[1548],{"type":34,"value":1549}," =",{"type":28,"tag":252,"props":1551,"children":1552},{"style":304},[1553],{"type":34,"value":1554}," \"Obtenir la liste des utilisateurs\"",{"type":28,"tag":252,"props":1556,"children":1557},{"style":921},[1558],{"type":34,"value":1490},{"type":28,"tag":252,"props":1560,"children":1561},{"class":254,"line":499},[1562,1566,1570,1574,1579,1583],{"type":28,"tag":252,"props":1563,"children":1564},{"style":1455},[1565],{"type":34,"value":1529},{"type":28,"tag":252,"props":1567,"children":1568},{"style":1461},[1569],{"type":34,"value":1223},{"type":28,"tag":252,"props":1571,"children":1572},{"style":921},[1573],{"type":34,"value":1480},{"type":28,"tag":252,"props":1575,"children":1576},{"style":1540},[1577],{"type":34,"value":1578},"value",{"type":28,"tag":252,"props":1580,"children":1581},{"style":1546},[1582],{"type":34,"value":1549},{"type":28,"tag":252,"props":1584,"children":1585},{"style":921},[1586],{"type":34,"value":1514},{"type":28,"tag":252,"props":1588,"children":1589},{"class":254,"line":517},[1590,1595,1599,1603,1608,1612,1617,1622,1627,1631,1636],{"type":28,"tag":252,"props":1591,"children":1592},{"style":1455},[1593],{"type":34,"value":1594},"        @",{"type":28,"tag":252,"props":1596,"children":1597},{"style":1461},[1598],{"type":34,"value":1159},{"type":28,"tag":252,"props":1600,"children":1601},{"style":921},[1602],{"type":34,"value":1480},{"type":28,"tag":252,"props":1604,"children":1605},{"style":1540},[1606],{"type":34,"value":1607},"responseCode",{"type":28,"tag":252,"props":1609,"children":1610},{"style":1546},[1611],{"type":34,"value":1549},{"type":28,"tag":252,"props":1613,"children":1614},{"style":304},[1615],{"type":34,"value":1616}," \"200\"",{"type":28,"tag":252,"props":1618,"children":1619},{"style":921},[1620],{"type":34,"value":1621},",",{"type":28,"tag":252,"props":1623,"children":1624},{"style":1540},[1625],{"type":34,"value":1626}," description",{"type":28,"tag":252,"props":1628,"children":1629},{"style":1546},[1630],{"type":34,"value":1549},{"type":28,"tag":252,"props":1632,"children":1633},{"style":304},[1634],{"type":34,"value":1635}," \"Liste des utilisateurs trouvée\"",{"type":28,"tag":252,"props":1637,"children":1638},{"style":921},[1639],{"type":34,"value":1640},",\n",{"type":28,"tag":252,"props":1642,"children":1643},{"class":254,"line":530},[1644,1649,1653,1658,1663,1667,1671,1676,1680,1685],{"type":28,"tag":252,"props":1645,"children":1646},{"style":1540},[1647],{"type":34,"value":1648},"            content",{"type":28,"tag":252,"props":1650,"children":1651},{"style":1546},[1652],{"type":34,"value":1549},{"type":28,"tag":252,"props":1654,"children":1655},{"style":921},[1656],{"type":34,"value":1657}," {",{"type":28,"tag":252,"props":1659,"children":1660},{"style":1455},[1661],{"type":34,"value":1662}," @",{"type":28,"tag":252,"props":1664,"children":1665},{"style":1461},[1666],{"type":34,"value":1030},{"type":28,"tag":252,"props":1668,"children":1669},{"style":921},[1670],{"type":34,"value":1480},{"type":28,"tag":252,"props":1672,"children":1673},{"style":1540},[1674],{"type":34,"value":1675},"mediaType",{"type":28,"tag":252,"props":1677,"children":1678},{"style":1546},[1679],{"type":34,"value":1549},{"type":28,"tag":252,"props":1681,"children":1682},{"style":304},[1683],{"type":34,"value":1684}," \"application/json\"",{"type":28,"tag":252,"props":1686,"children":1687},{"style":921},[1688],{"type":34,"value":1640},{"type":28,"tag":252,"props":1690,"children":1691},{"class":254,"line":543},[1692,1697,1701,1705,1709,1713,1718,1722,1727,1731,1736,1741],{"type":28,"tag":252,"props":1693,"children":1694},{"style":1540},[1695],{"type":34,"value":1696},"            schema",{"type":28,"tag":252,"props":1698,"children":1699},{"style":1546},[1700],{"type":34,"value":1549},{"type":28,"tag":252,"props":1702,"children":1703},{"style":1455},[1704],{"type":34,"value":1662},{"type":28,"tag":252,"props":1706,"children":1707},{"style":1461},[1708],{"type":34,"value":1094},{"type":28,"tag":252,"props":1710,"children":1711},{"style":921},[1712],{"type":34,"value":1480},{"type":28,"tag":252,"props":1714,"children":1715},{"style":1540},[1716],{"type":34,"value":1717},"implementation",{"type":28,"tag":252,"props":1719,"children":1720},{"style":1546},[1721],{"type":34,"value":1549},{"type":28,"tag":252,"props":1723,"children":1724},{"style":773},[1725],{"type":34,"value":1726}," User",{"type":28,"tag":252,"props":1728,"children":1729},{"style":921},[1730],{"type":34,"value":883},{"type":28,"tag":252,"props":1732,"children":1733},{"style":773},[1734],{"type":34,"value":1735},"class",{"type":28,"tag":252,"props":1737,"children":1738},{"style":921},[1739],{"type":34,"value":1740},"))",{"type":28,"tag":252,"props":1742,"children":1743},{"style":921},[1744],{"type":34,"value":1745}," }),\n",{"type":28,"tag":252,"props":1747,"children":1748},{"class":254,"line":561},[1749,1753,1757,1761,1765,1769,1774,1778,1782,1786,1791],{"type":28,"tag":252,"props":1750,"children":1751},{"style":1455},[1752],{"type":34,"value":1594},{"type":28,"tag":252,"props":1754,"children":1755},{"style":1461},[1756],{"type":34,"value":1159},{"type":28,"tag":252,"props":1758,"children":1759},{"style":921},[1760],{"type":34,"value":1480},{"type":28,"tag":252,"props":1762,"children":1763},{"style":1540},[1764],{"type":34,"value":1607},{"type":28,"tag":252,"props":1766,"children":1767},{"style":1546},[1768],{"type":34,"value":1549},{"type":28,"tag":252,"props":1770,"children":1771},{"style":304},[1772],{"type":34,"value":1773}," \"400\"",{"type":28,"tag":252,"props":1775,"children":1776},{"style":921},[1777],{"type":34,"value":1621},{"type":28,"tag":252,"props":1779,"children":1780},{"style":1540},[1781],{"type":34,"value":1626},{"type":28,"tag":252,"props":1783,"children":1784},{"style":1546},[1785],{"type":34,"value":1549},{"type":28,"tag":252,"props":1787,"children":1788},{"style":304},[1789],{"type":34,"value":1790}," \"Requête invalide\"",{"type":28,"tag":252,"props":1792,"children":1793},{"style":921},[1794],{"type":34,"value":1640},{"type":28,"tag":252,"props":1796,"children":1797},{"class":254,"line":574},[1798,1802,1806,1810,1814],{"type":28,"tag":252,"props":1799,"children":1800},{"style":1540},[1801],{"type":34,"value":1648},{"type":28,"tag":252,"props":1803,"children":1804},{"style":1546},[1805],{"type":34,"value":1549},{"type":28,"tag":252,"props":1807,"children":1808},{"style":1455},[1809],{"type":34,"value":1662},{"type":28,"tag":252,"props":1811,"children":1812},{"style":1461},[1813],{"type":34,"value":1030},{"type":28,"tag":252,"props":1815,"children":1816},{"style":921},[1817],{"type":34,"value":1818},"),\n",{"type":28,"tag":252,"props":1820,"children":1822},{"class":254,"line":1821},23,[1823,1827,1831,1835,1839,1843,1848,1852,1856,1860,1865],{"type":28,"tag":252,"props":1824,"children":1825},{"style":1455},[1826],{"type":34,"value":1594},{"type":28,"tag":252,"props":1828,"children":1829},{"style":1461},[1830],{"type":34,"value":1159},{"type":28,"tag":252,"props":1832,"children":1833},{"style":921},[1834],{"type":34,"value":1480},{"type":28,"tag":252,"props":1836,"children":1837},{"style":1540},[1838],{"type":34,"value":1607},{"type":28,"tag":252,"props":1840,"children":1841},{"style":1546},[1842],{"type":34,"value":1549},{"type":28,"tag":252,"props":1844,"children":1845},{"style":304},[1846],{"type":34,"value":1847}," \"404\"",{"type":28,"tag":252,"props":1849,"children":1850},{"style":921},[1851],{"type":34,"value":1621},{"type":28,"tag":252,"props":1853,"children":1854},{"style":1540},[1855],{"type":34,"value":1626},{"type":28,"tag":252,"props":1857,"children":1858},{"style":1546},[1859],{"type":34,"value":1549},{"type":28,"tag":252,"props":1861,"children":1862},{"style":304},[1863],{"type":34,"value":1864}," \"Utilisateurs non trouvés\"",{"type":28,"tag":252,"props":1866,"children":1867},{"style":921},[1868],{"type":34,"value":1640},{"type":28,"tag":252,"props":1870,"children":1872},{"class":254,"line":1871},24,[1873,1877,1881,1885,1889,1894],{"type":28,"tag":252,"props":1874,"children":1875},{"style":1540},[1876],{"type":34,"value":1648},{"type":28,"tag":252,"props":1878,"children":1879},{"style":1546},[1880],{"type":34,"value":1549},{"type":28,"tag":252,"props":1882,"children":1883},{"style":1455},[1884],{"type":34,"value":1662},{"type":28,"tag":252,"props":1886,"children":1887},{"style":1461},[1888],{"type":34,"value":1030},{"type":28,"tag":252,"props":1890,"children":1891},{"style":921},[1892],{"type":34,"value":1893},")",{"type":28,"tag":252,"props":1895,"children":1896},{"style":921},[1897],{"type":34,"value":1898}," })\n",{"type":28,"tag":252,"props":1900,"children":1902},{"class":254,"line":1901},25,[1903,1907],{"type":28,"tag":252,"props":1904,"children":1905},{"style":1455},[1906],{"type":34,"value":1529},{"type":28,"tag":252,"props":1908,"children":1909},{"style":1461},[1910],{"type":34,"value":1911},"GetMapping\n",{"type":28,"tag":252,"props":1913,"children":1915},{"class":254,"line":1914},26,[1916,1921,1927,1931,1936,1940,1946,1951],{"type":28,"tag":252,"props":1917,"children":1918},{"style":910},[1919],{"type":34,"value":1920},"    public",{"type":28,"tag":252,"props":1922,"children":1924},{"style":1923},"--shiki-default:#CA9EE6;--shiki-dark:#E1E4E8",[1925],{"type":34,"value":1926}," List",{"type":28,"tag":252,"props":1928,"children":1929},{"style":921},[1930],{"type":34,"value":742},{"type":28,"tag":252,"props":1932,"children":1933},{"style":910},[1934],{"type":34,"value":1935},"User",{"type":28,"tag":252,"props":1937,"children":1938},{"style":921},[1939],{"type":34,"value":770},{"type":28,"tag":252,"props":1941,"children":1943},{"style":1942},"--shiki-default:#8CAAEE;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[1944],{"type":34,"value":1945}," getUsers",{"type":28,"tag":252,"props":1947,"children":1948},{"style":921},[1949],{"type":34,"value":1950},"()",{"type":28,"tag":252,"props":1952,"children":1953},{"style":921},[1954],{"type":34,"value":1514},{"type":28,"tag":252,"props":1956,"children":1958},{"class":254,"line":1957},27,[1959],{"type":28,"tag":252,"props":1960,"children":1962},{"style":1961},"--shiki-default:#737994;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit",[1963],{"type":34,"value":1964},"        // Simuler une liste d'utilisateurs\n",{"type":28,"tag":252,"props":1966,"children":1968},{"class":254,"line":1967},28,[1969,1974,1978,1982,1987,1991,1996,2000,2004,2009,2013,2018,2023,2028,2032,2036,2041,2045,2050],{"type":28,"tag":252,"props":1970,"children":1971},{"style":910},[1972],{"type":34,"value":1973},"        return",{"type":28,"tag":252,"props":1975,"children":1976},{"style":773},[1977],{"type":34,"value":1926},{"type":28,"tag":252,"props":1979,"children":1980},{"style":921},[1981],{"type":34,"value":883},{"type":28,"tag":252,"props":1983,"children":1984},{"style":1942},[1985],{"type":34,"value":1986},"of",{"type":28,"tag":252,"props":1988,"children":1989},{"style":921},[1990],{"type":34,"value":1480},{"type":28,"tag":252,"props":1992,"children":1993},{"style":910},[1994],{"type":34,"value":1995},"new",{"type":28,"tag":252,"props":1997,"children":1998},{"style":1942},[1999],{"type":34,"value":1726},{"type":28,"tag":252,"props":2001,"children":2002},{"style":921},[2003],{"type":34,"value":1480},{"type":28,"tag":252,"props":2005,"children":2006},{"style":271},[2007],{"type":34,"value":2008},"1",{"type":28,"tag":252,"props":2010,"children":2011},{"style":921},[2012],{"type":34,"value":1621},{"type":28,"tag":252,"props":2014,"children":2015},{"style":304},[2016],{"type":34,"value":2017}," \"Alice\"",{"type":28,"tag":252,"props":2019,"children":2020},{"style":921},[2021],{"type":34,"value":2022},"),",{"type":28,"tag":252,"props":2024,"children":2025},{"style":910},[2026],{"type":34,"value":2027}," new",{"type":28,"tag":252,"props":2029,"children":2030},{"style":1942},[2031],{"type":34,"value":1726},{"type":28,"tag":252,"props":2033,"children":2034},{"style":921},[2035],{"type":34,"value":1480},{"type":28,"tag":252,"props":2037,"children":2038},{"style":271},[2039],{"type":34,"value":2040},"2",{"type":28,"tag":252,"props":2042,"children":2043},{"style":921},[2044],{"type":34,"value":1621},{"type":28,"tag":252,"props":2046,"children":2047},{"style":304},[2048],{"type":34,"value":2049}," \"Bob\"",{"type":28,"tag":252,"props":2051,"children":2052},{"style":921},[2053],{"type":34,"value":2054},"));\n",{"type":28,"tag":252,"props":2056,"children":2058},{"class":254,"line":2057},29,[2059],{"type":28,"tag":252,"props":2060,"children":2061},{"style":921},[2062],{"type":34,"value":2063},"    }\n",{"type":28,"tag":252,"props":2065,"children":2067},{"class":254,"line":2066},30,[2068],{"type":28,"tag":252,"props":2069,"children":2070},{"emptyLinePlaceholder":12},[2071],{"type":34,"value":1408},{"type":28,"tag":252,"props":2073,"children":2075},{"class":254,"line":2074},31,[2076],{"type":28,"tag":252,"props":2077,"children":2078},{"style":921},[2079],{"type":34,"value":2080},"}\n",{"type":28,"tag":252,"props":2082,"children":2084},{"class":254,"line":2083},32,[2085],{"type":28,"tag":252,"props":2086,"children":2087},{"emptyLinePlaceholder":12},[2088],{"type":34,"value":1408},{"type":28,"tag":252,"props":2090,"children":2092},{"class":254,"line":2091},33,[2093,2097,2101],{"type":28,"tag":252,"props":2094,"children":2095},{"style":910},[2096],{"type":34,"value":1735},{"type":28,"tag":252,"props":2098,"children":2099},{"style":1506},[2100],{"type":34,"value":1726},{"type":28,"tag":252,"props":2102,"children":2103},{"style":921},[2104],{"type":34,"value":1514},{"type":28,"tag":252,"props":2106,"children":2108},{"class":254,"line":2107},34,[2109,2114,2119,2124],{"type":28,"tag":252,"props":2110,"children":2111},{"style":910},[2112],{"type":34,"value":2113},"    private",{"type":28,"tag":252,"props":2115,"children":2116},{"style":910},[2117],{"type":34,"value":2118}," int",{"type":28,"tag":252,"props":2120,"children":2121},{"style":773},[2122],{"type":34,"value":2123}," id",{"type":28,"tag":252,"props":2125,"children":2126},{"style":921},[2127],{"type":34,"value":969},{"type":28,"tag":252,"props":2129,"children":2131},{"class":254,"line":2130},35,[2132,2136,2141,2146],{"type":28,"tag":252,"props":2133,"children":2134},{"style":910},[2135],{"type":34,"value":2113},{"type":28,"tag":252,"props":2137,"children":2138},{"style":1923},[2139],{"type":34,"value":2140}," String",{"type":28,"tag":252,"props":2142,"children":2143},{"style":773},[2144],{"type":34,"value":2145}," name",{"type":28,"tag":252,"props":2147,"children":2148},{"style":921},[2149],{"type":34,"value":969},{"type":28,"tag":252,"props":2151,"children":2153},{"class":254,"line":2152},36,[2154],{"type":28,"tag":252,"props":2155,"children":2156},{"emptyLinePlaceholder":12},[2157],{"type":34,"value":1408},{"type":28,"tag":252,"props":2159,"children":2161},{"class":254,"line":2160},37,[2162,2166,2170,2174,2179,2184,2188,2192,2196,2200],{"type":28,"tag":252,"props":2163,"children":2164},{"style":910},[2165],{"type":34,"value":1920},{"type":28,"tag":252,"props":2167,"children":2168},{"style":1942},[2169],{"type":34,"value":1726},{"type":28,"tag":252,"props":2171,"children":2172},{"style":921},[2173],{"type":34,"value":1480},{"type":28,"tag":252,"props":2175,"children":2176},{"style":910},[2177],{"type":34,"value":2178},"int",{"type":28,"tag":252,"props":2180,"children":2182},{"style":2181},"--shiki-default:#EA999C;--shiki-default-font-style:italic;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit",[2183],{"type":34,"value":2123},{"type":28,"tag":252,"props":2185,"children":2186},{"style":921},[2187],{"type":34,"value":1621},{"type":28,"tag":252,"props":2189,"children":2190},{"style":1923},[2191],{"type":34,"value":2140},{"type":28,"tag":252,"props":2193,"children":2194},{"style":2181},[2195],{"type":34,"value":2145},{"type":28,"tag":252,"props":2197,"children":2198},{"style":921},[2199],{"type":34,"value":1893},{"type":28,"tag":252,"props":2201,"children":2202},{"style":921},[2203],{"type":34,"value":1514},{"type":28,"tag":252,"props":2205,"children":2207},{"class":254,"line":2206},38,[2208,2214,2218,2223,2228],{"type":28,"tag":252,"props":2209,"children":2211},{"style":2210},"--shiki-default:#E78284;--shiki-dark:#79B8FF",[2212],{"type":34,"value":2213},"        this",{"type":28,"tag":252,"props":2215,"children":2216},{"style":921},[2217],{"type":34,"value":883},{"type":28,"tag":252,"props":2219,"children":2220},{"style":773},[2221],{"type":34,"value":2222},"id ",{"type":28,"tag":252,"props":2224,"children":2225},{"style":1546},[2226],{"type":34,"value":2227},"=",{"type":28,"tag":252,"props":2229,"children":2230},{"style":773},[2231],{"type":34,"value":2232}," id\n",{"type":28,"tag":252,"props":2234,"children":2236},{"class":254,"line":2235},39,[2237],{"type":28,"tag":252,"props":2238,"children":2239},{"emptyLinePlaceholder":12},[2240],{"type":34,"value":1408},{"type":28,"tag":252,"props":2242,"children":2244},{"class":254,"line":2243},40,[2245],{"type":28,"tag":252,"props":2246,"children":2247},{"style":921},[2248],{"type":34,"value":969},{"type":28,"tag":252,"props":2250,"children":2252},{"class":254,"line":2251},41,[2253,2257,2261,2266,2270,2274],{"type":28,"tag":252,"props":2254,"children":2255},{"style":2210},[2256],{"type":34,"value":2213},{"type":28,"tag":252,"props":2258,"children":2259},{"style":921},[2260],{"type":34,"value":883},{"type":28,"tag":252,"props":2262,"children":2263},{"style":773},[2264],{"type":34,"value":2265},"name ",{"type":28,"tag":252,"props":2267,"children":2268},{"style":1546},[2269],{"type":34,"value":2227},{"type":28,"tag":252,"props":2271,"children":2272},{"style":773},[2273],{"type":34,"value":2145},{"type":28,"tag":252,"props":2275,"children":2276},{"style":921},[2277],{"type":34,"value":969},{"type":28,"tag":252,"props":2279,"children":2281},{"class":254,"line":2280},42,[2282],{"type":28,"tag":252,"props":2283,"children":2284},{"style":921},[2285],{"type":34,"value":2063},{"type":28,"tag":252,"props":2287,"children":2289},{"class":254,"line":2288},43,[2290],{"type":28,"tag":252,"props":2291,"children":2292},{"emptyLinePlaceholder":12},[2293],{"type":34,"value":1408},{"type":28,"tag":252,"props":2295,"children":2297},{"class":254,"line":2296},44,[2298],{"type":28,"tag":252,"props":2299,"children":2300},{"style":1961},[2301],{"type":34,"value":2302},"    // Getters et setters\n",{"type":28,"tag":252,"props":2304,"children":2306},{"class":254,"line":2305},45,[2307,2311,2315,2320,2324],{"type":28,"tag":252,"props":2308,"children":2309},{"style":910},[2310],{"type":34,"value":1920},{"type":28,"tag":252,"props":2312,"children":2313},{"style":910},[2314],{"type":34,"value":2118},{"type":28,"tag":252,"props":2316,"children":2317},{"style":1942},[2318],{"type":34,"value":2319}," getId",{"type":28,"tag":252,"props":2321,"children":2322},{"style":921},[2323],{"type":34,"value":1950},{"type":28,"tag":252,"props":2325,"children":2326},{"style":921},[2327],{"type":34,"value":1514},{"type":28,"tag":252,"props":2329,"children":2331},{"class":254,"line":2330},46,[2332,2336,2340],{"type":28,"tag":252,"props":2333,"children":2334},{"style":910},[2335],{"type":34,"value":1973},{"type":28,"tag":252,"props":2337,"children":2338},{"style":773},[2339],{"type":34,"value":2123},{"type":28,"tag":252,"props":2341,"children":2342},{"style":921},[2343],{"type":34,"value":969},{"type":28,"tag":252,"props":2345,"children":2347},{"class":254,"line":2346},47,[2348],{"type":28,"tag":252,"props":2349,"children":2350},{"style":921},[2351],{"type":34,"value":2063},{"type":28,"tag":252,"props":2353,"children":2355},{"class":254,"line":2354},48,[2356],{"type":28,"tag":252,"props":2357,"children":2358},{"emptyLinePlaceholder":12},[2359],{"type":34,"value":1408},{"type":28,"tag":252,"props":2361,"children":2363},{"class":254,"line":2362},49,[2364,2368,2373,2378,2382,2386,2390,2394],{"type":28,"tag":252,"props":2365,"children":2366},{"style":910},[2367],{"type":34,"value":1920},{"type":28,"tag":252,"props":2369,"children":2370},{"style":910},[2371],{"type":34,"value":2372}," void",{"type":28,"tag":252,"props":2374,"children":2375},{"style":1942},[2376],{"type":34,"value":2377}," setId",{"type":28,"tag":252,"props":2379,"children":2380},{"style":921},[2381],{"type":34,"value":1480},{"type":28,"tag":252,"props":2383,"children":2384},{"style":910},[2385],{"type":34,"value":2178},{"type":28,"tag":252,"props":2387,"children":2388},{"style":2181},[2389],{"type":34,"value":2123},{"type":28,"tag":252,"props":2391,"children":2392},{"style":921},[2393],{"type":34,"value":1893},{"type":28,"tag":252,"props":2395,"children":2396},{"style":921},[2397],{"type":34,"value":1514},{"type":28,"tag":252,"props":2399,"children":2401},{"class":254,"line":2400},50,[2402,2406,2410,2414,2418,2422],{"type":28,"tag":252,"props":2403,"children":2404},{"style":2210},[2405],{"type":34,"value":2213},{"type":28,"tag":252,"props":2407,"children":2408},{"style":921},[2409],{"type":34,"value":883},{"type":28,"tag":252,"props":2411,"children":2412},{"style":773},[2413],{"type":34,"value":2222},{"type":28,"tag":252,"props":2415,"children":2416},{"style":1546},[2417],{"type":34,"value":2227},{"type":28,"tag":252,"props":2419,"children":2420},{"style":773},[2421],{"type":34,"value":2123},{"type":28,"tag":252,"props":2423,"children":2424},{"style":921},[2425],{"type":34,"value":969},{"type":28,"tag":252,"props":2427,"children":2429},{"class":254,"line":2428},51,[2430],{"type":28,"tag":252,"props":2431,"children":2432},{"style":921},[2433],{"type":34,"value":2063},{"type":28,"tag":252,"props":2435,"children":2437},{"class":254,"line":2436},52,[2438],{"type":28,"tag":252,"props":2439,"children":2440},{"emptyLinePlaceholder":12},[2441],{"type":34,"value":1408},{"type":28,"tag":252,"props":2443,"children":2445},{"class":254,"line":2444},53,[2446,2450,2454,2459,2463],{"type":28,"tag":252,"props":2447,"children":2448},{"style":910},[2449],{"type":34,"value":1920},{"type":28,"tag":252,"props":2451,"children":2452},{"style":1923},[2453],{"type":34,"value":2140},{"type":28,"tag":252,"props":2455,"children":2456},{"style":1942},[2457],{"type":34,"value":2458}," getName",{"type":28,"tag":252,"props":2460,"children":2461},{"style":921},[2462],{"type":34,"value":1950},{"type":28,"tag":252,"props":2464,"children":2465},{"style":921},[2466],{"type":34,"value":1514},{"type":28,"tag":252,"props":2468,"children":2469},{"class":254,"line":10},[2470,2474,2478],{"type":28,"tag":252,"props":2471,"children":2472},{"style":910},[2473],{"type":34,"value":1973},{"type":28,"tag":252,"props":2475,"children":2476},{"style":773},[2477],{"type":34,"value":2145},{"type":28,"tag":252,"props":2479,"children":2480},{"style":921},[2481],{"type":34,"value":969},{"type":28,"tag":252,"props":2483,"children":2485},{"class":254,"line":2484},55,[2486],{"type":28,"tag":252,"props":2487,"children":2488},{"style":921},[2489],{"type":34,"value":2063},{"type":28,"tag":252,"props":2491,"children":2493},{"class":254,"line":2492},56,[2494],{"type":28,"tag":252,"props":2495,"children":2496},{"emptyLinePlaceholder":12},[2497],{"type":34,"value":1408},{"type":28,"tag":252,"props":2499,"children":2501},{"class":254,"line":2500},57,[2502,2506,2510,2515,2519,2524,2528,2532],{"type":28,"tag":252,"props":2503,"children":2504},{"style":910},[2505],{"type":34,"value":1920},{"type":28,"tag":252,"props":2507,"children":2508},{"style":910},[2509],{"type":34,"value":2372},{"type":28,"tag":252,"props":2511,"children":2512},{"style":1942},[2513],{"type":34,"value":2514}," setName",{"type":28,"tag":252,"props":2516,"children":2517},{"style":921},[2518],{"type":34,"value":1480},{"type":28,"tag":252,"props":2520,"children":2521},{"style":1923},[2522],{"type":34,"value":2523},"String",{"type":28,"tag":252,"props":2525,"children":2526},{"style":2181},[2527],{"type":34,"value":2145},{"type":28,"tag":252,"props":2529,"children":2530},{"style":921},[2531],{"type":34,"value":1893},{"type":28,"tag":252,"props":2533,"children":2534},{"style":921},[2535],{"type":34,"value":1514},{"type":28,"tag":252,"props":2537,"children":2539},{"class":254,"line":2538},58,[2540,2544,2548,2552,2556,2560],{"type":28,"tag":252,"props":2541,"children":2542},{"style":2210},[2543],{"type":34,"value":2213},{"type":28,"tag":252,"props":2545,"children":2546},{"style":921},[2547],{"type":34,"value":883},{"type":28,"tag":252,"props":2549,"children":2550},{"style":773},[2551],{"type":34,"value":2265},{"type":28,"tag":252,"props":2553,"children":2554},{"style":1546},[2555],{"type":34,"value":2227},{"type":28,"tag":252,"props":2557,"children":2558},{"style":773},[2559],{"type":34,"value":2145},{"type":28,"tag":252,"props":2561,"children":2562},{"style":921},[2563],{"type":34,"value":969},{"type":28,"tag":252,"props":2565,"children":2567},{"class":254,"line":2566},59,[2568],{"type":28,"tag":252,"props":2569,"children":2570},{"style":921},[2571],{"type":34,"value":2063},{"type":28,"tag":252,"props":2573,"children":2575},{"class":254,"line":2574},60,[2576],{"type":28,"tag":252,"props":2577,"children":2578},{"style":921},[2579],{"type":34,"value":2080},{"type":28,"tag":2581,"props":2582,"children":2584},"h4",{"id":2583},"explication-des-annotations-swagger",[2585],{"type":34,"value":2586},"Explication des annotations Swagger :",{"type":28,"tag":646,"props":2588,"children":2589},{},[2590,2608,2633],{"type":28,"tag":650,"props":2591,"children":2592},{},[2593,2598,2600,2606],{"type":28,"tag":48,"props":2594,"children":2595},{},[2596],{"type":34,"value":2597},"@Operation",{"type":34,"value":2599}," : Décrit l'opération ou l'endpoint de manière concise. Ici, la méthode ",{"type":28,"tag":248,"props":2601,"children":2603},{"className":2602},[],[2604],{"type":34,"value":2605},"getUsers()",{"type":34,"value":2607}," est annotée pour indiquer qu'elle retourne une liste d’utilisateurs.",{"type":28,"tag":650,"props":2609,"children":2610},{},[2611,2616,2618,2623,2625,2631],{"type":28,"tag":48,"props":2612,"children":2613},{},[2614],{"type":34,"value":2615},"@ApiResponses",{"type":34,"value":2617}," : Définit les réponses possibles de l'API, comme le code ",{"type":28,"tag":248,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":34,"value":631},{"type":34,"value":2624}," pour une réponse réussie ou ",{"type":28,"tag":248,"props":2626,"children":2628},{"className":2627},[],[2629],{"type":34,"value":2630},"404",{"type":34,"value":2632}," pour des utilisateurs non trouvés.",{"type":28,"tag":650,"props":2634,"children":2635},{},[2636,2641,2643,2648],{"type":28,"tag":48,"props":2637,"children":2638},{},[2639],{"type":34,"value":2640},"@Schema",{"type":34,"value":2642}," : Définit le modèle des données pour structurer les réponses, ici l'objet ",{"type":28,"tag":248,"props":2644,"children":2646},{"className":2645},[],[2647],{"type":34,"value":1935},{"type":34,"value":883},{"type":28,"tag":37,"props":2650,"children":2651},{},[2652],{"type":34,"value":2653},"Avec cette configuration, vous pouvez visualiser et tester vos endpoints directement dans Swagger UI via votre navigateur.",{"type":28,"tag":93,"props":2655,"children":2656},{},[],{"type":28,"tag":97,"props":2658,"children":2660},{"id":2659},"bonnes-pratiques-pour-réussir-ladoption-dapi-first-avec-spring-boot-et-java",[2661],{"type":34,"value":2662},"Bonnes pratiques pour réussir l’adoption d’API First avec Spring Boot et Java",{"type":28,"tag":37,"props":2664,"children":2665},{},[2666,2668,2672,2674,2678,2679,2683],{"type":34,"value":2667},"Adopter l’approche ",{"type":28,"tag":48,"props":2669,"children":2670},{},[2671],{"type":34,"value":52},{"type":34,"value":2673}," dans vos projets de développement peut transformer la manière dont vous collaborez et écrivez du code. Voici quelques conseils essentiels pour une adoption réussie d'API First avec ",{"type":28,"tag":48,"props":2675,"children":2676},{},[2677],{"type":34,"value":71},{"type":34,"value":84},{"type":28,"tag":48,"props":2680,"children":2681},{},[2682],{"type":34,"value":89},{"type":34,"value":883},{"type":28,"tag":115,"props":2685,"children":2687},{"id":2686},"_1-impliquer-toutes-les-équipes-dès-le-début",[2688],{"type":34,"value":2689},"1. Impliquer toutes les équipes dès le début",{"type":28,"tag":37,"props":2691,"children":2692},{},[2693],{"type":34,"value":2694},"L’un des principes clés de l’approche API First est de considérer l’API comme un contrat entre toutes les parties prenantes : les développeurs front-end, back-end, les équipes QA, et parfois même les équipes produits. Il est donc crucial que ces équipes soient impliquées dès la phase de spécification de l’API. Cela garantit une collaboration harmonieuse et réduit les risques d’incohérences.",{"type":28,"tag":115,"props":2696,"children":2698},{"id":2697},"_2-automatiser-la-génération-du-code-et-des-tests",[2699],{"type":34,"value":2700},"2. Automatiser la génération du code et des tests",{"type":28,"tag":37,"props":2702,"children":2703},{},[2704,2706,2710,2712,2717,2718,2723],{"type":34,"value":2705},"Un des avantages majeurs de l’approche API First est la possibilité de générer automatiquement du code à partir de la spécification ",{"type":28,"tag":48,"props":2707,"children":2708},{},[2709],{"type":34,"value":64},{"type":34,"value":2711},". Avec des outils comme ",{"type":28,"tag":48,"props":2713,"children":2714},{},[2715],{"type":34,"value":2716},"Swagger Codegen",{"type":34,"value":609},{"type":28,"tag":48,"props":2719,"children":2720},{},[2721],{"type":34,"value":2722},"OpenAPI Generator",{"type":34,"value":2724},", vous pouvez automatiser la création de contrôleurs, de modèles et même de clients API pour accélérer le développement.",{"type":28,"tag":37,"props":2726,"children":2727},{},[2728],{"type":34,"value":2729},"Voici un exemple de commande pour générer du code Spring Boot à partir d'une spécification OpenAPI :",{"type":28,"tag":241,"props":2731,"children":2735},{"className":2732,"code":2733,"language":2734,"meta":7,"style":7},"language-bash shiki shiki-themes catppuccin-frappe github-dark","openapi-generator-cli generate -i openapi.yaml -g spring -o ./generated-code/\n","bash",[2736],{"type":28,"tag":248,"props":2737,"children":2738},{"__ignoreMap":7},[2739],{"type":28,"tag":252,"props":2740,"children":2741},{"class":254,"line":255},[2742,2747,2752,2758,2763,2768,2773,2778],{"type":28,"tag":252,"props":2743,"children":2744},{"style":1942},[2745],{"type":34,"value":2746},"openapi-generator-cli",{"type":28,"tag":252,"props":2748,"children":2749},{"style":304},[2750],{"type":34,"value":2751}," generate",{"type":28,"tag":252,"props":2753,"children":2755},{"style":2754},"--shiki-default:#A6D189;--shiki-dark:#79B8FF",[2756],{"type":34,"value":2757}," -i",{"type":28,"tag":252,"props":2759,"children":2760},{"style":304},[2761],{"type":34,"value":2762}," openapi.yaml",{"type":28,"tag":252,"props":2764,"children":2765},{"style":2754},[2766],{"type":34,"value":2767}," -g",{"type":28,"tag":252,"props":2769,"children":2770},{"style":304},[2771],{"type":34,"value":2772}," spring",{"type":28,"tag":252,"props":2774,"children":2775},{"style":2754},[2776],{"type":34,"value":2777}," -o",{"type":28,"tag":252,"props":2779,"children":2780},{"style":304},[2781],{"type":34,"value":2782}," ./generated-code/\n",{"type":28,"tag":115,"props":2784,"children":2786},{"id":2785},"_3-mettre-à-jour-régulièrement-la-spécification",[2787],{"type":34,"value":2788},"3. Mettre à jour régulièrement la spécification",{"type":28,"tag":37,"props":2790,"children":2791},{},[2792,2794,2798,2800,2804],{"type":34,"value":2793},"Votre spécification ",{"type":28,"tag":48,"props":2795,"children":2796},{},[2797],{"type":34,"value":64},{"type":34,"value":2799}," doit toujours être à jour avec votre code. Utilisez des outils comme ",{"type":28,"tag":48,"props":2801,"children":2802},{},[2803],{"type":34,"value":701},{"type":34,"value":2805}," pour générer automatiquement une documentation OpenAPI à partir de vos contrôleurs Java. En maintenant cette documentation à jour, vous garantissez que l’API reste synchronisée avec le développement.",{"type":28,"tag":115,"props":2807,"children":2809},{"id":2808},"_4-valider-lapi-dès-les-premières-étapes-du-projet",[2810],{"type":34,"value":2811},"4. Valider l’API dès les premières étapes du projet",{"type":28,"tag":37,"props":2813,"children":2814},{},[2815,2817,2822,2823,2828],{"type":34,"value":2816},"Avant même de commencer à coder, validez la spécification de votre API avec des outils comme ",{"type":28,"tag":48,"props":2818,"children":2819},{},[2820],{"type":34,"value":2821},"Swagger Editor",{"type":34,"value":609},{"type":28,"tag":48,"props":2824,"children":2825},{},[2826],{"type":34,"value":2827},"Postman",{"type":34,"value":2829},". Cela permet de tester les endpoints et d’assurer que tout est en phase avec les attentes des équipes avant de passer à la phase d’implémentation.",{"type":28,"tag":115,"props":2831,"children":2833},{"id":2832},"_5-favoriser-une-communication-continue-entre-les-équipes",[2834],{"type":34,"value":2835},"5. Favoriser une communication continue entre les équipes",{"type":28,"tag":37,"props":2837,"children":2838},{},[2839,2841,2847],{"type":34,"value":2840},"L’approche API First encourage la communication régulière entre les équipes de développement front-end, back-end et produit. Pour que cette API reste découplée de l’infrastructure et testable indépendamment, les principes de la ",{"type":28,"tag":155,"props":2842,"children":2844},{"href":2843},"/fr/architecture-craft/clean-architecture-3-regles",[2845],{"type":34,"value":2846},"Clean Architecture",{"type":34,"value":2848}," sont un complément naturel. Organisez des revues régulières de la spécification de l’API pour vous assurer que toutes les parties prenantes sont alignées et que les changements sont bien compris par tous.",{"type":28,"tag":93,"props":2850,"children":2851},{},[],{"type":28,"tag":97,"props":2853,"children":2855},{"id":2854},"faq-sur-api-first-et-spring-boot",[2856],{"type":34,"value":2857},"FAQ sur API First et Spring Boot",{"type":28,"tag":2859,"props":2860,"children":2861},"details",{},[2862,2867],{"type":28,"tag":1543,"props":2863,"children":2864},{},[2865],{"type":34,"value":2866},"1. Qu’est-ce que l’approche API First ?",{"type":28,"tag":37,"props":2868,"children":2869},{},[2870,2872,2876],{"type":34,"value":2871},"L’approche ",{"type":28,"tag":48,"props":2873,"children":2874},{},[2875],{"type":34,"value":52},{"type":34,"value":2877}," consiste à définir et documenter une API avant de commencer à coder. L’API devient ainsi le contrat central entre toutes les équipes (front-end, back-end, QA, produit). Cela permet d’aligner les équipes dès le début et d’éviter les erreurs de communication et d’intégration tout au long du développement.",{"type":28,"tag":2859,"props":2879,"children":2880},{},[2881,2886],{"type":28,"tag":1543,"props":2882,"children":2883},{},[2884],{"type":34,"value":2885},"2. Quels sont les principaux avantages de l’approche API First ?",{"type":28,"tag":646,"props":2887,"children":2888},{},[2889,2899,2909],{"type":28,"tag":650,"props":2890,"children":2891},{},[2892,2897],{"type":28,"tag":48,"props":2893,"children":2894},{},[2895],{"type":34,"value":2896},"Collaboration inter-équipes",{"type":34,"value":2898}," : Les équipes front-end et back-end sont synchronisées dès le début grâce à une spécification centralisée.",{"type":28,"tag":650,"props":2900,"children":2901},{},[2902,2907],{"type":28,"tag":48,"props":2903,"children":2904},{},[2905],{"type":34,"value":2906},"Documentation à jour",{"type":34,"value":2908}," : OpenAPI sert à la fois de documentation et de contrat technique.",{"type":28,"tag":650,"props":2910,"children":2911},{},[2912,2917],{"type":28,"tag":48,"props":2913,"children":2914},{},[2915],{"type":34,"value":2916},"Réduction des erreurs",{"type":34,"value":2918}," : Les erreurs liées à des APIs mal définies sont minimisées car tout est validé et testé dès le début.",{"type":28,"tag":2859,"props":2920,"children":2921},{},[2922,2927],{"type":28,"tag":1543,"props":2923,"children":2924},{},[2925],{"type":34,"value":2926},"3. Comment OpenAPI s’intègre-t-il dans l’approche API First ?",{"type":28,"tag":37,"props":2928,"children":2929},{},[2930,2934],{"type":28,"tag":48,"props":2931,"children":2932},{},[2933],{"type":34,"value":64},{"type":34,"value":2935}," est un standard permettant de définir les API de manière formelle, souvent en format YAML ou JSON. Il permet de générer du code automatiquement, de documenter les API et de valider les endpoints à chaque étape du développement.",{"type":28,"tag":2859,"props":2937,"children":2938},{},[2939,2944],{"type":28,"tag":1543,"props":2940,"children":2941},{},[2942],{"type":34,"value":2943},"4. Comment utiliser OpenAPI avec Spring Boot ?",{"type":28,"tag":37,"props":2945,"children":2946},{},[2947,2949,2953],{"type":34,"value":2948},"Ajoutez la dépendance ",{"type":28,"tag":48,"props":2950,"children":2951},{},[2952],{"type":34,"value":701},{"type":34,"value":2954}," à votre projet, et utilisez les annotations Swagger pour enrichir la documentation. Swagger UI vous permet de visualiser et tester vos endpoints en temps réel, et OpenAPI Generator peut automatiser la génération de code à partir d’une spécification.",{"type":28,"tag":2859,"props":2956,"children":2957},{},[2958,2963],{"type":28,"tag":1543,"props":2959,"children":2960},{},[2961],{"type":34,"value":2962},"5. Est-ce que l’approche API First est adaptée aux petites équipes ?",{"type":28,"tag":37,"props":2964,"children":2965},{},[2966],{"type":34,"value":2967},"Oui, API First est tout aussi bénéfique pour les petites équipes. Cela permet d’éviter des allers-retours coûteux entre front-end et back-end, et la documentation est toujours liée au code, réduisant les erreurs et augmentant l’efficacité.",{"type":28,"tag":2859,"props":2969,"children":2970},{},[2971,2976],{"type":28,"tag":1543,"props":2972,"children":2973},{},[2974],{"type":34,"value":2975},"6. Comment maintenir la documentation OpenAPI à jour pendant le développement ?",{"type":28,"tag":37,"props":2977,"children":2978},{},[2979,2981,2985],{"type":34,"value":2980},"Intégrez la mise à jour de la spécification OpenAPI dans votre flux de travail. Utiliser ",{"type":28,"tag":48,"props":2982,"children":2983},{},[2984],{"type":34,"value":701},{"type":34,"value":2986}," vous permet de générer automatiquement une documentation OpenAPI à partir du code Java, en la tenant à jour à chaque modification du code.",{"type":28,"tag":189,"props":2988,"children":2993},{"cta":2989,"href":2990,"title":2991,"type":2992},"Accéder au template gratuit →","/mes-ressources","Ressource gratuite : Auditez votre équipe engineering en 2 heures","resource",[2994],{"type":28,"tag":37,"props":2995,"children":2996},{},[2997],{"type":34,"value":2998},"Le template Notion utilisé dans 15+ audits professionnels. 6 sections, 40 questions guidées, scoring visuel automatique. Format décisionnel prêt à présenter à votre direction.",{"type":28,"tag":93,"props":3000,"children":3001},{},[],{"type":28,"tag":3003,"props":3004,"children":3005},"style",{},[3006],{"type":34,"value":3007},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":277,"depth":277,"links":3009},[3010,3017,3022,3029],{"id":99,"depth":277,"text":102,"children":3011},[3012,3013,3014,3015,3016],{"id":117,"depth":291,"text":120},{"id":128,"depth":291,"text":131},{"id":145,"depth":291,"text":148},{"id":165,"depth":291,"text":168},{"id":176,"depth":291,"text":179},{"id":208,"depth":277,"text":211,"children":3018},[3019,3020,3021],{"id":231,"depth":291,"text":234},{"id":636,"depth":291,"text":639},{"id":682,"depth":291,"text":685},{"id":2659,"depth":277,"text":2662,"children":3023},[3024,3025,3026,3027,3028],{"id":2686,"depth":291,"text":2689},{"id":2697,"depth":291,"text":2700},{"id":2785,"depth":291,"text":2788},{"id":2808,"depth":291,"text":2811},{"id":2832,"depth":291,"text":2835},{"id":2854,"depth":277,"text":2857},"markdown","content:fr:architecture-craft:api-first-openapi-spring-boot.md","content","fr/architecture-craft/api-first-openapi-spring-boot.md","fr/architecture-craft/api-first-openapi-spring-boot","md",1775679819222]