REST API 升级到 v4 的技术概述
与先前的版本 (v2) 相比,REST API v4.0 进行了多项功能增强、优化和改进。API v4 通过使用与 v2 相同的访问令牌来保持兼容性,以便于您将代码逐步迁移到 v4,同时能够继续使用现有的令牌。值得注意的是,API v4 的路径前缀已从“/api/v2”更改为“/api/v4/”。虽然许多函数的名称和模型都保持不变,以确保从“v2”轻松过渡到“v4”,但有一些函数已经过修改。本主题用作技术指南,概述了 API v4 中引入的主要更改。
OData 版本升级
API 现在使用 OData v4 而不是 OData v3。此升级引入了高级查询功能,包括支持对数据进行强大的聚合操作。
对用户的影响:
- 用户可以利用更复杂的查询进行精确的数据检索。
- 为满足 OData v4 标准,需要更新基于 OData v3 语法的现有查询。
substringof不再可用;在 v4 中,您应该改用contains。- Guid 文字已更改:
guid’971314e0-b891-4d2e-b672-0dc37885bb0a’⇒971314e0-b891-4d2e-b672-0dc37885bb0a - 日期时间文字已更改:
DateTime'2024-07-31T07:30:00'⇒2024-07-31T07:30:00z
集合函数的页面结果
返回集合的函数现在提供分页结果,其中包括可选的总计数。
响应将遵循以下格式:
{
"Items": [
{
Item1 ...
},
{
Item2 ...
}
],
"Count": 2 //Optional - appears only if query option $count=true was provided
}
在 API v2 中,返回集合的许多函数都有两个版本:一个版本返回对象的集合,另一个版本返回对象的页面结果。页面结果的优点在于,如果使用 $top 和 $skip 检索单个页面,则对象的总计数将包括在数据中,而无需额外请求该计数。
在 API v4 中,直接返回对象的函数已被省略。这些函数始终以 PageResult 格式提供数据。计数是可选的,只有在向查询选项中添加了 $count = true 时才会返回。
例如,API v2 中有两个函数,即 /api/V2/Apps 和 /api/V2/Apps/GetAsPage,前者以常规格式(对象数组)返回结果,而后者以页面格式返回带有计数的结果。
在 v4 中,只有一个函数 /api/v4/Apps,它以页面格式返回结果,并且计数是可选的。请注意,如果不需要计数,则不请求计数可提高效率。
移除冗余函数
已移除返回特定对象的函数,以便将特定对象标识的过滤器应用于返回集合的函数。
不再需要聚合对象的函数,因为现在可以使用 OData v4 ($apply 查询选项)来实现此功能。
示例:
未将 GET /api/v2/Scans/CountByUser 添加到 v4 中。
可通过以下 URL 实现相同的功能:
GET /api/v4/Scans?$apply=groupby((CreatedBy/Id,CreatedBy/UserName,CreatedBy/FirstName,CreatedBy/LastName,CreatedBy/Email), aggregate($count as Count))
出于相同原因未添加到 v4 中的其他类似函数:
/api/v2/Scans/CountByStatus
/api/v2/Scans/CountByTechnology
/api/V2/Users/Count
/api/v2/Issues/CountBySeverity/{scope}/{scopeId}
/api/v2/Issues/CountByStatus/{scope}/{scopeId}
/api/V2/AssetGroups/Count
扫描技术的术语更改
- DynamicAnalyzer ⇒ Dast
- StaticAnalyzer ⇒ Sast
- IASTAnalyzer ⇒ Iast
- ScaAnalyzer ⇒ Sca
这些更改影响了“扫描”部分下的以下 API 函数:
GET /api/v2/Scans/DynamicAnalyzer/{scanId} ⇒ /api/v4/Scans/Dast/{scanId}GET /api/v2/Scans/StaticAnalyzer/{scanId} ⇒ /api/v4/Scans/Sast/{scanId}GET /api/v2/Scans/ScaAnalyzer/{scanId} ⇒ /api/v4/Scans/Sca/{scanId}GET /api/v2/Scans/StaticAnalyzerExecution/{executionId} ⇒ /api/v4/Scans/SastExecution/{executionId}GET /api/v2/Scans/DynamicAnalyzerExecution/{executionId} ⇒ /api/v4/Scans/DastExecution/{executionId}GET /api/v2/Scans/DynamicAnalyzerScanFile/{executionId} ⇒ /api/v4/Scans/DastScanFile/{executionId}POST /api/v2/Scans/StaticAnalyzer ⇒ /api/v4/Scans/SastPOST /api/v2/Scans/DynamicAnalyzerUploadedResultsFromFile ⇒ /api/v4/Scans/DastScanResultsPOST /api/v2/Scans/IASTAnalyzer ⇒ /api/v4/Scans/Iast
为创建 DAST 扫描,已将 API v2 中的三个函数合并为一个公开所有选项的函数。请注意,v4 中新函数所需的模型与 v2 中的模型不同。有关详细信息,请参阅 API 文档。
以下三个函数:
POST /api/v2/Scans/DynamicAnalyzer
POST /api/v2/Scans/DynamicAnalyzerWithFile
POST /api/v2/Scans/DynamicAnalyzerWithFiles
已合并为一个函数:
POST /api/v4/Scans/Dast
问题模型的更改
GET /api/v4/Issues/{scope}/{scopeId} 返回):- “Id”和“ApplicationId”的类型已从字符串更改为 guid。这是一个小调整,但会影响 OData 过滤器的格式。
- 已从模型中移除以下过时属性:AvailabilityImpact、Classification、ConfidentialityImpact、Authentication、AccessComplexity、AccessVector、ProjectName、Protocol、RemediationLevel、ReportConfidence、NessusPluginId、FixRecommendation、IntegrityImpact、Summary、WhiteHatSecVulnId、StepsToReproduce、Description、Exploitability、ApplicationName、FriendlyId。