API web de SonarQube
Comment récupérer les mesures faites par SonarQube gràce à l'API Web
Pourquoi cet article ?
J'avais besoin pour un projet interne de récupérer des données mesurées par Sonar en passant par l'API web, j'ai passé une demi journée à trouver la page de documentation de l'API (Je cherchais dans la documentation du site officiel et il s'avère qu'elle était dans l'interface que j'hébergeais, dans les petits liens du footer qui habituellement servent à rediriger vers un site externe).
Une fois avoir trouvé la liste des liens possibles et ce qu'ils faisaient, j'ai passé une demi-journée de plus à comprendre la logique d'utilisation de l'API en expérimentant.
C'est donc pour vous éviter ce temps qui en plus d'être perdu fut pénible que je rédige cet article (^__^).
Outils utilisés
La marche à suivre expliquée ci-dessous à été faite sur la version 6.5 mais les URL de l'API sont fonctionnels pour la version 5.6.6 LTS.
Je conseille l'utilisation d'un client REST pour vous faciliter la tache, personnellement j'ai utilisé l'extension pour navigateurs RESTClient.
Puisque nous ne faisons que récupérer des données, nous n'utiliserons que le protocole GET pendant ce tutoriel. Toutes les données retournées sont au format JSON.
URL que nous allons utiliser
Lorsqu'on veut récupérer une valeur d'une mesure, il va nous falloir la clé de celle-ci, pour la récupérer, il va d'abord falloir passer par l'URL
<IP>:<PORT>/api/metrics/search
Cette URL va retourner la liste complète des mesures faites par sonar avec un nom, une description et un type de retour.
Par défaut, l'API vous retournera une liste de 100 entrées, il vous faudra donc passer de pages en pages pour tout consulter, vous pouvez utiliser l'URL si dessous :
http://localhost:9000/api/metrics/search?p=1&ps=500
Le paramètre p correspond au numéro de la page et ps le nombre d'entrées qui seront retournées. En théorie, avec la commande ci-dessus vous devriez récupérer la totalité des mesures possibles en une seule page.
Maintenant qu'on à les clés des infos qu'on cherche, il faut les récupérer dans notre projet.
Au préalable, vous devez récupérer la clé du projet sur lequel récupérer les données de mesure. Pour ça connectez vous en tant qu'admin sur l'interface (admin:admin), cliquez sur le projet et récupérez la clé à droite de la page
Si vous voulez récupérer les données sur un module ou une classe en particulier, vous pouvez faire une requête à cet URL pour avoir la liste complète des composants avec leur clefs respectives
<IP>:<PORT>/api/measures/component_tree?baseComponentKey=<CLE DE MON PROJET>&metricKeys=functions
Maintenant que vous avez la clé de la "metric" que vous recherchez ainsi que celle du projet, il vous suffit de faire un appel à l'URL "api/measures/component" avec les paramètres qui conviennent comme par exemple, si je veux récupérer le nombre de functions d'un projet ainsi que le nombre de lignes totale :
<IP>:<PORT>/api/measures/component?componentKey=<CLE DE MON PROJET>&metricKeys=functions,lines
Note
Pour accéder à la documentation de l'API web de sonar, il suffit d'aller sur l'interface d'administration à ce lien :
<IP>:<PORT>/web_api/