Documentation d'un API avec OpenAPI
La documentation de l'api est une étape essentielle qu'il ne faut pas négliger. Vous devez toujours garder à l'esprit que votre API peut être destiné à être utilisé par d'autres utilisateurs et la documentation va indiquer la marche à suivre.
Votre documentation doit absolument comporter les éléments suivants :
- Une liste de toutes les routes (endpoint) de votre api avec une description de leur utilité.
- Les informations d'authentification s'il y a lieu.
- Pour chaque route, les paramètres à ajouter à la requête.
- Pour chaque route, toutes les réponses possibles et les valeurs retournées (code de status, données retournées)
Note
Nous allons utiliser la norme OpenAPI pour rédiger la documentation et le module Swagger UI Express pour le rendu visuel.
Installation
Installez le module Swagger UI Express avec npm
Dans le répertoire ./src/config/
créez un fichier JSON qui va contenir votre documentation. Pour l'instant copiez le contenu qui suit, on va voir la composition du fichier en détail plus loin.
./src/config/documentation.json | |
---|---|
Dans le fichier de démarrage de votre application, ajoutez les lignes de codes suivantes (en surligné)
Maintenant lancez votre application et accédez à la route que vous avez définie (/api/docs
si vous avez utilisé le code plus haut). Vous devriez avoir ce résultat.
Composition du fichier de documentation
Le fichier JSON sera composé de plusieurs sections, certaines requises et d'autres optionnelles.
À la première ligne, ajoutez la clé openapi avec la version d'OpenAPI que vous utilisez. Vous pouvez utiliser la version 3.1.0
documentation.json | |
---|---|
info
L'information générale au sujet de votre api.
"info" : {
"title": "Titre de votre API [REQUIS]",
"summary": "Une courte description de ce que fait votre API",
"description": "Une description plus détaillé de ce que fait votre API",
"contact": {
"name": "API Support",
"url": "https://www.example.com/support",
"email": "support@example.com"
},
"version": "1.0.1 [REQUIS - Version de votre API]"
},
servers
Un tableau d'objets serveurs qui indique où on peut exécuter l'api.
"servers": [
{
"url": "http://localhost:3000/",
"description": "Serveur de développement"
},
{
"url": "http://api.profs.ca",
"description": "Serveur en ligne"
}
],
paths
Une liste d'objets path qui détaillent les routes de votre api.
Objet path
C'est avec l'objet path qu'on va détailler les routes. On va avoir une clé par route, même si elle est utilisée par plus d'une méthode http. Par exemple si j'ai une route GET /api/salutations
et POST /api/salutations
je vais ne faire qu'une entrée. Chaque méthode va être définie plus loin.
{
"paths" : {
"/api/salutations/liste" : {
"get": {
"description": "Retourne la liste de toutes les salutations",
"summary": "Liste des salutations",
"tags": [ "Salutions" ],
"parameters": [ { objet parameter } ],
"responses": {
"200": { response object }
}
},
"post": {
...
}
}
}
}
On ne fera pas l'énumération de toutes les options pour détailler une route, à l'essentiel vous devez avoir
- Une description et un tags
- La liste des paramètres requis
- Toutes les réponses possibles detaillées
Pour plus d'information je vous invite à consulter la documentation
Manuel
Exemple
Voici un exemple avec les routes :
- GET /api : Retourne un message en HTML
- GET /api/salutations?langue=fr : Retourne une salutation aléatoire avec un paramètre query optionnel
- POST /api/salutations : Ajout d'une salutation avec paramètre dans le body.
- GET /api/salutations/1 : Retourne une salutation selon un id dans la route.
documentation.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
|
Mediagraphie
- OpenAPI specification. Swagger. (n.d.). https://swagger.io/specification/
- Swagger-ui-express. npm. (n.d.). https://www.npmjs.com/package/swagger-ui-express