sonarqube7.2版本web api簡析
本文介紹sonarqube的部分實用Web API,並試圖聯系實際進行分析,方便集成.以7.2版本為例,下載移步官網.
Web API文檔路徑
安裝並部署7.2版本的sonar之后(推薦在linux上安裝),在瀏覽器上打開sonar,默認是ip:9000端口.
http://{ip}:9000/web_api
即是sonar的api文檔. 由於國內資源較少,當時在官網看了半天文檔又查了一堆才發現這個預設的路徑.這也是為什么寫這篇文章,我認為這樣的工具是值得推廣的.
認證api
部分的sonar api功能需要依靠權限使用,sonar才用的是Basic Auth,就是最普通的認證.
web_api/api/authentication
下可以查看對應的認證api.
例如:
POST api/authentication/login 參數是login和password
沒有特別說明的話,這里的login和password都是admin,可以在sonar頁面的最上方Administration里點進行密碼修改,也可以直接修改config文件.
如果使用POSTMAN測試接口需要認證的sonar GET接口,可以在postman的認證里,選basic auth,然后填login和password,再發GET請求就可以了.
重復度api
GET api/duplications/show
例子參數是key=my_project:/src/foo/Bar.php
,使用該接口可以拿某個代碼文件的重復度分析,似乎作用不大.后面會講另一個比較有用的.
issues api
頁面在web_api/api/issues
,issues意為問題,告警,github上常見這個單詞,還是建議多熟悉英文.
這里的api很多是修改和添加注釋等內容,這類api適合自己在sonar之上再封裝一層.
如果只是客戶端讀取sonar的issues信息,可以使用GET api/issues/search
,這個api的參數非常多,在我看來有幾個好用,然后講解一下.
componentKeys
這是可選參數,意思是組件key,查閱后發現這個key可以代表projectKey,模塊的key,單個文件的key,而且可以用逗號隔開傳入多個.
比如:my_project,my_project1,my_project2
這樣是查了三個工程的issue情況.
這里講解一下projectKey的概念:
點進自己的某一個掃描后的項目project,會在右下角發現一個projectKey.如果是maven工程,默認是
如果項目有branch分支的話,projectKey默認是
branch如果集成maven插件,參數是-Dsonar.branch,不過現在是deprecated狀態.
projectKey可以通過傳參數來指定,
-Dsonar.projectKey
,官方文檔原文是:
The project key that is unique for each project. Allowed characters are: letters, numbers, '-', '_', '.' and ':', with at least one non-digit. When using Maven, it is automatically set to <groupId>:<artifactId>
大致就是說,命名規范和默認情況.
https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
<-- 查閱maven插件參數
severities
問題的等級,如果只需要修改最重要等級的,直接用這個參數去獲取要改的部分吧.好用.
其他參數都寫挺清晰了.
issue 返回json
"paging": { "pageIndex": 1, "pageSize": 100, "total": 1 },
這部分其實是第一頁,每頁100個,實際上可以用參數分頁查詢.
issues節點里是個json數組,內容比較多,講解幾個參數.
{
"key": "01fc972e-2a3c-433e-bcae-0bd7f88f5123", issue的唯一key
"component": "com.github.kevinsawicki:http-request:com.github.kevinsawicki.http.HttpRequest", 組件Key,這里是具體到類的
"project": "com.github.kevinsawicki:http-request", projectKe
"rule": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MagicNumberCheck", 規則
"status": "RESOLVED", 解決狀態
"resolution": "FALSE-POSITIVE", 是否誤報
"severity": "MINOR", 告警等級
"message": "'3' is a magic number.", 告警信息
"line": 81,
"hash": "a227e508d6646b55a086ee11d63b21e9",
"author": "Developer 1",
"effort": "2h1min", 解決問題需要的時間
"creationDate": "2013-05-13T17:55:39+0200",
"updateDate": "2013-05-13T17:55:39+0200",
"tags": [
"bug"
],
之后有個flow節點,這個是和數據流規則相關的.
"flows": [
{
"locations": [
{
"textRange": {
"startLine": 16,
"endLine": 16,
"startOffset": 0,
"endOffset": 30
},
"msg": "Expected position: 5"
}
]
},
{
提供locations節點,指定具體的行數.照目前這例子看似乎還只是單文件數據流.
metrics api
metrics,意為度量,在代碼掃描中,常常對復雜度,cpd重復代碼等進行分析,這也都算metrics,度量的范疇.
Get information on automatic metrics
獲得自動度量的結果
GET api/metrics/search
這個api可以查找某個項目的所有度量,應該沒大用處...
measures api
GET api/measures/component
以component
組件key和metricKeys
度量key作為參數,查詢某個項目的度量情況,比如重復度,復雜度,行數統計,例如:
metricKeys=ncloc,complexity,violations
先這么多,之后可能繼續更新.