如何通过REST API调用提取Coverity中的指定状态报告?
你之前调用的项目视图类接口无法拿到目标状态报告数据,核心原因是状态报告属于聚合报表模块,和普通视图内容走两套独立接口,具体可落地的实现方案如下:
前置要求
仅Coverity 2020.12及以上版本提供对应公开REST API,更低版本需要使用旧版SOAP接口,无公开REST方案。
所有接口请求需要携带认证信息:
- 账号密码认证:请求头使用标准Basic Auth,填入平台登录的账号密码
- API Key认证:Basic Auth用户名填
api,密码填你生成的API Key
具体实现步骤
匹配目标报告获取唯一ID
接口不支持直接按名称拉取报告,需要先拉取所有状态类报告列表做名称匹配:GET /api/reports/v1/reports?queryType=STATUS接口返回结果中包含所有状态报告的
name(报告名称)和id(报告唯一标识),找到你指定名称对应的id即可。触发报告动态生成
状态报告是实时聚合计算的,不存在预存的静态结果,需要先触发生成任务:POST /api/reports/v1/reports/{上一步拿到的reportId}/executions Content-Type: application/json {}如果需要限定统计范围(比如指定项目、统计时间区间、快照范围),可以在请求体JSON中加入对应过滤参数,无特殊过滤传空对象即可。调用成功后会返回本次执行的
executionId。轮询确认报告生成状态
报告生成需要一定计算时间,轮询调用以下接口查询进度:GET /api/reports/v1/reports/{reportId}/executions/{executionId}当返回结果中的
status字段为COMPLETED时表示生成完成,若为IN_PROGRESS则间隔3-5秒重试即可,普通规模项目的报告生成时间一般在10秒以内。拉取最终报告内容
生成完成后调用以下接口获取最终数据:GET /api/reports/v1/reports/{reportId}/executions/{executionId}/content可以通过请求头
Accept控制返回格式:Accept: application/json:返回结构化JSON数据,适合程序二次解析Accept: text/csv:返回CSV格式文件,适合导出做本地分析
返回内容和前端页面看到的状态报告字段完全一致,包含各严重等级缺陷计数、新增/修复/遗留缺陷统计、按组件/负责人维度的聚合数据。
之前调用接口无效的原因说明
你尝试调用的/api/viewContents/projects/v1/All%20Projects?projectId=*属于普通视图内容接口,仅会返回项目列表的原始属性字段,不会做状态报告需要的多维度聚合计算,因此无法拿到你需要的报表数据。
内容的提问来源于stack exchange,提问作者monstermind

