La do­cu­men­ta­tion est une étape très chro­no­phage du dé­ve­lop­pe­ment et, bien souvent, les personnes ex­té­rieures au projet ignorent à quel point celle-ci peut s’avérer utile pour la main­te­nance et le dé­ve­lop­pe­ment ultérieur d’un système. On s’en aperçoit plus tard, lorsque ces tâches sont confiées à d’autres personnes que l’équipe à l’origine du système ; ce qui est davantage la règle que l’exception.

La do­cu­men­ta­tion est par­ti­cu­liè­re­ment im­por­tante dans le cas d’une API, c’est-à-dire une Ap­pli­ca­tion Pro­gram­ming Interface, ou, en français, l’interface. Les in­ter­faces con­nec­tent les logiciels entre eux, ainsi que les ap­pli­ca­tions avec des sources de données et d’autres systèmes. Aujourd’hui, bien rares sont les cas où se connecter à un logiciel se passe de l’in­ter­ven­tion d’un grand nombre d’API. Cependant, pour pouvoir com­prendre une interface, il faut en com­prendre la structure et les fonctions. C’est ce que permet la spé­ci­fi­ca­tion OpenAPI Swagger, un format de des­crip­tion libre qui aide à consigner les dif­fé­rentes capacités d’une API. Avec Swagger, même les personnes qui n’ont pas di­rec­te­ment pris part au processus de dé­ve­lop­pe­ment peuvent préparer une API : elles peuvent voir les in­ter­faces utilisées et les do­cu­men­ter en même temps.

API de IONOS pour dé­ve­lop­peurs
Gérez vos produits d'hé­ber­ge­ment grâce à notre puissante API
  • En­re­gis­tre­ments DNS
  • Ad­mi­nis­tra­tion SSL
  • Do­cu­men­ta­tion API

Qu’est-ce que Swagger ?

Par le passé, en raison des multiples tech­no­lo­gies et langages de pro­gram­ma­tion existants, la des­crip­tion des API était très complexe. Une première grande étape dans le processus d’or­ga­ni­sa­tion des API a été la création du paradigme de pro­gram­ma­tion REST. Les sites Internet comme Google, Amazon et Twitter utilisent des API RESTful. Au­pa­ra­vant, les in­ter­faces étaient décrites dans le Web Service Des­crip­tion Language WSDL. WSDL 2.0 per­met­tait aussi de décrire des API REST d’un point de vue purement technique, une pratique cependant très peu commode pour les dé­ve­lop­peurs. Le Web Ap­pli­ca­tion Des­crip­tion Language (WADL) devait remédier à ce problème, mais n’a jamais été stan­dar­disé en raison de sa structure en XML.

Ainsi, Swagger est vite devenu la tech­no­lo­gie la plus appréciée pour la do­cu­men­ta­tion API. Plus pré­ci­sé­ment, pour do­cu­men­ter les API REST, très souvent utilisées. Swagger a été développé par Reverb, mais il s’agit désormais d’une solution in­dé­pen­dante et open source, sous la gou­ver­nance de la fondation Linux, et plus pré­ci­sé­ment de l’OpenAPI Ini­tia­tive. Avec ce chan­ge­ment d’acteurs, Swagger a été rebaptisé « spé­ci­fi­ca­tion OpenAPI », même s’il reste of­fi­cieu­se­ment connu sous le nom plus ac­cro­cheur de « Swagger ».

Swagger peut servir notamment dans des ap­pli­ca­tions dé­ve­lop­pées avec Spring Boot, comme expliqué dans la vidéo suivante.

no0y4ISItiw.jpg Pour afficher cette vidéo, des cookies de tiers sont nécessaires. Vous pouvez consulter et modifier vos paramètres de cookies ici.

L’élément central de Swagger est, en fonction de son champ d’ap­pli­ca­tion, un fichier au format JSONP ou YAML. L’interface uti­li­sa­teur, qui permet de re­pré­sen­ter très fa­ci­le­ment la do­cu­men­ta­tion, fonc­tionne avec HTML et Ja­vaS­cript. En principe, Swagger présente un format in­dé­pen­dant de tout langage in­for­ma­tique et lisible par une machine. À partir de l’interface uti­li­sa­teur, on peut non seulement ad­mi­nis­trer la do­cu­men­ta­tion, mais aussi s’en servir pour que Swagger effectue, par exemple, des tests ad hoc.

Swagger présente un avantage évident avec son mode dé­ve­lop­pe­ment, assuré par une bi­blio­thèque centrale, Swagger Core. L’interface uti­li­sa­teur s’appelle Swagger UI, le gé­né­ra­teur de code Swagger Codegen, et il existe aussi un Swagger Editor.

Mais la grande force de Swagger, tout comme de nom­breuses autres solutions open source, réside dans l’éco­sys­tème complet de GitHub. Là, les dé­ve­lop­peurs trou­ve­ront des gé­né­ra­teurs de code pour presque tous les langages de pro­gram­ma­tion. Swagger documente chaque interface avec toutes les in­for­ma­tions.

Le fichier de do­cu­men­ta­tion commence par ren­seig­ner la version de la spé­ci­fi­ca­tion utilisée, suivie de quelques in­for­ma­tions générales sur l’API, clai­re­ment classées dans la catégorie info. Swagger distingue également l’hôte, le chemin et le schéma d’URL et les mentionne sé­pa­ré­ment. Ensuite seulement, on retrouve le type de média pour l’ensemble de l’API. Cette pré­pa­ra­tion s’apparente à un système complexe de fiches bristol.

Une fois cette ca­té­go­ri­sa­tion achevée, on re­pré­sente les contenus : chemins, opé­ra­teurs et pa­ra­mètres sont préparés avec leurs des­crip­tions cor­res­pon­dantes. Les types de données sont ad­mi­nis­trés à part, dans une section dédiée. Swagger UI permet de re­pré­sen­ter l’ensemble non seulement au format texte, mais aussi par une vi­sua­li­sa­tion graphique. Une propriété surtout avan­ta­geuse lorsque les requêtes tests directes doivent être envoyées depuis le na­vi­ga­teur. Ce mélange entre do­cu­men­ta­tion parfaite doublée de la pos­si­bi­lité de résoudre, en parallèle, des requêtes API directes, donne toute sa valeur à Swagger.

Dans quels cas utilise-t-on Swagger ?

Dé­ve­lop­per une API exige de disposer d’une do­cu­men­ta­tion ordonnée et com­pré­hen­sible. Elle seule permet aux dé­ve­lop­peurs de se servir d’une interface. C’est encore plus vrai pour les API publiques : sans do­cu­men­ta­tion, elles sont inu­ti­li­sables pour la com­mu­nauté, ne sont pas com­plé­tées et ne ren­contrent aucun succès.

À l’heure actuelle, Swagger est la meilleure solution pour do­cu­men­ter une API REST, car le système est capable de re­pré­sen­ter presque tous les services Web et in­for­ma­tions ayant trait à l’interface. La do­cu­men­ta­tion évolue en même temps que le système et en­re­gistre au­to­ma­ti­que­ment les mo­di­fi­ca­tions. Swagger se montre par­ti­cu­liè­re­ment efficace pour parvenir à ce résultat parce qu’il consigne la do­cu­men­ta­tion d’une API REST di­rec­te­ment dans son code.

Le point de départ de tout projet de dé­ve­lop­pe­ment d’API est soit le code de pro­gram­ma­tion (approche « Code first »), soit la des­crip­tion de l’interface (approche « Design first »). Dans le cas d’un projet en Code first, le point de départ convenu est le code. Swagger peut di­rec­te­ment déduire la do­cu­men­ta­tion à partir du code de pro­gram­ma­tion et produire des res­sources in­dé­pen­dantes du langage de pro­gram­ma­tion utilisé, lisibles aussi bien par des machines que par des humains.

À l’autre bout du paradigme, l’approche Design first. Comme nous l’avons déjà évoqué, bien souvent, le client et le serveur sont gérés par des dé­ve­lop­peurs dif­fé­rents. L’approche Design first préconise de commencer par rédiger la des­crip­tion. Ensuite, les codes sont sim­ple­ment générés par Swagger. Pour ce faire, il existe des gé­né­ra­teurs pour tous les langages de pro­gram­ma­tion courants. Même les modèles peuvent encore être adaptés ou complétés.

Swagger propose ainsi presque au­to­ma­ti­que­ment un code API cohérent. Si quelque chose ne cor­res­pond pas dans la pro­gram­ma­tion manuelle, on rencontre des erreurs de com­pi­la­tion, que l’uti­li­sa­tion d’un système d’in­té­gra­tion continue permet de vi­sua­li­ser au­to­ma­ti­que­ment.

Remarque

Les grandes en­tre­prises, comme Zalando, suivent le principe API first et utilisent Swagger à cette fin. Les dé­ve­lop­peurs de cette pla­te­forme de e-commerce ont reconnu l’im­por­tance d’avoir des in­ter­faces fonc­tion­nelles et leur accordent une place centrale. En interne, les API sont utilisées entre les dif­fé­rentes équipes des services ; en externe, l’en­tre­prise utilise des API pour les requêtes con­cer­nant des articles ou des éva­lua­tions.

Swagger : les avantages d’une pro­gram­ma­tion bien ordonnée

Les avantages de Swagger sont si con­vain­cants qu’on peut tout à fait qualifier Swagger d’ap­pli­ca­tion standard ex­cep­tion­nelle pour la des­crip­tion d’in­ter­faces REST. Comme beaucoup d’autres ap­pli­ca­tions open source, Swagger bénéficie d’une large diffusion, ac­com­pag­née d’un support complet. Le comité de Swagger se compose de géants de la tech, comme Microsoft, IBM ou Google, ce qui assure un soutien pérenne à la spé­ci­fi­ca­tion OpenAPI, même s’il existe des al­ter­na­tives. Le Restful API Modelling Language (RAML) s’appuie par exemple aussi sur le YAML et peut même créer des dé­fi­ni­tions encore plus complexes que celles de Swagger. Le créateur de RAML (Mulesoft) a cependant lui-même intégré l’OpenAPI Ini­tia­tive.

L’in­tel­li­gi­bi­lité et la li­si­bi­lité de la do­cu­men­ta­tion de Swagger restent un petit in­con­vé­nient. La solution propose certes un format déjà plutôt bien structuré, mais il faut malgré tout un peu de temps pour se l’ap­pro­prier. Pourtant, certains langages dé­montrent qu’il est possible de faire plus simple, comme API Blueprint et sa syntaxe en Markdown.

Swagger : un exemple pratique pour démarrer

Sur le site de Swagger UI, on trouve le fichier ZIP complet de Swagger. Après le té­lé­char­ge­ment, vous devez choisir d’exécuter Swagger en local ou sur un serveur.

Attention : si vous voulez l’exécuter en local, vous aurez besoin de MAMP. Vous devrez placer le dossier dé­com­pressé Swagger UI Master soit dans le dossier MAMP, soit sur le serveur. Ensuite, il suffit d’ouvrir l’URL du serveur ou de l’hôte local dans votre na­vi­ga­teur : Swagger s’ouvre au­to­ma­ti­que­ment et la première do­cu­men­ta­tion API se lance.

La version Web de l’éditeur de Swagger est encore plus simple. Celle-ci fonc­tionne sans problème dans votre na­vi­ga­teur et vous fait profiter, en plus de l’éditeur de texte, de l’affichage graphique de la do­cu­men­ta­tion.

Swagger: "2.0"
info:
    description: "Ceci est un exemple Swagger"
    version: "1.0.0"
    title: "Exemple Swagger"
    termsOfService: "http://Swagger.io/terms/"
basePath: "/v2"
tags:
- name: "Exemple"
    description: "Exemples pour Swagger"
    externalDocs:
        description: "En savoir plus"
        url: "http://example.org"
schemes:
- "https"
- "http"
paths:
    /Exemple:
    /Exemple/Contenu:
        get:
            tags:
            - "Exemple"
            summary: "Interroger un élément d’exemple"
            produces:
            - "application/json"
            parameters: []
            responses:
                "200":
                    description: "successful operation"
                    schema:
                        type: "object"
                        additionalProperties:
                            type: "integer"
                            format: "int32"
            security:
            - api_key: []

Ce court extrait d’un exemple Swagger permet déjà de com­prendre la structure. Toutes les in­for­ma­tions sont clai­re­ment iden­ti­fiées et com­pré­hen­sibles, in­dé­pen­dam­ment du langage de pro­gram­ma­tion.

Enfin, la do­cu­men­ta­tion s’exporte di­rec­te­ment dans un fichier YAML, ou bien se convertit d’abord au format JSON. C’est le fichier de do­cu­men­ta­tion que Swagger UI est capable de lire. Les contenus affichés ren­seig­nent tout d’abord les chemins, les in­ter­faces et les points de ter­mi­nai­son. Viennent ensuite les des­crip­tions, les pa­ra­mètres, ainsi que la réponse et ses sig­ni­fi­ca­tions. L’interface uti­li­sa­teur de Swagger permet d’exécuter des tests ad hoc sur les points de ter­mi­nai­son.

Le grand atout de l’open source, c’est que l’on peut tester les outils gra­tui­te­ment. C’est le cas pour Swagger UI et l’ensemble de ses outils. Ainsi, il est possible de se faire soi-même une idée des pos­si­bi­li­tés qu’offre Swagger.

Aller au menu principal