438 lines
13 KiB
Markdown
438 lines
13 KiB
Markdown
# API 文档
|
||
|
||
## 元数据
|
||
- 需求编号:004-03
|
||
- 创建时间:2026-02-05
|
||
- 创建人:AI Assistant
|
||
- 版本号:v1.0.0
|
||
- 状态:已完成
|
||
|
||
## API 概述
|
||
本文档描述 Tooling API 开发工具功能的 REST API 接口,提供 Salesforce 开发工具集的查询功能,包括代码覆盖率查询、测试队列管理、日志获取和成员查询等。
|
||
|
||
**基础路径**:`/api/tooling/devtools`
|
||
|
||
**认证方式**:JWT Token(通过 Header 传递)
|
||
|
||
## 接口列表
|
||
|
||
### 1. 查询代码覆盖率
|
||
|
||
**功能描述**:查询 Apex 类/触发器的代码覆盖率信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/code-coverage`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| classOrTriggerName | String | 否 | 类或触发器名称(模糊查询)|
|
||
| classOrTriggerId | String | 否 | 类或触发器 ID |
|
||
| namespace | String | 否 | 命名空间前缀 |
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败)|
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | 代码覆盖率列表 |
|
||
| data.rows[].apexClassOrTriggerId | String | 类或触发器 ID |
|
||
| data.rows[].apexClassOrTriggerName | String | 类或触发器名称 |
|
||
| data.rows[].coverage | Double | 覆盖率百分比 |
|
||
| data.rows[].numLinesCovered | Integer | 已覆盖行数 |
|
||
| data.rows[].numLinesUncovered | Integer | 未覆盖行数 |
|
||
|
||
- **成功示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 2,
|
||
"rows": [
|
||
{
|
||
"apexClassOrTriggerId": "01p5g00000XxXxXxXx",
|
||
"apexClassOrTriggerName": "AccountTrigger",
|
||
"coverage": 85.5,
|
||
"numLinesCovered": 120,
|
||
"numLinesUncovered": 20
|
||
},
|
||
{
|
||
"apexClassOrTriggerId": "01p5g00000YyYyYyYy",
|
||
"apexClassOrTriggerName": "ContactController",
|
||
"coverage": 92.0,
|
||
"numLinesCovered": 230,
|
||
"numLinesUncovered": 20
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_001:查询条件不能为空
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_003:查询代码覆盖率失败
|
||
|
||
---
|
||
|
||
### 2. 查询测试队列项
|
||
|
||
**功能描述**:查询测试队列项(ApexTestQueueItem)信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/test-queue-items`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| status | String | 否 | 状态(Queued/Processing/Completed/Failed/Aborted)|
|
||
| apexClassId | String | 否 | Apex 类 ID |
|
||
| parentJobId | String | 否 | 父作业 ID |
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败)|
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | 测试队列项列表 |
|
||
| data.rows[].apexClassId | String | Apex 类 ID |
|
||
| data.rows[].apexClassName | String | Apex 类名称 |
|
||
| data.rows[].status | String | 状态 |
|
||
| data.rows[].extendedStatus | String | 扩展状态 |
|
||
| data.rows[].methodNames | String | 方法名列表 |
|
||
| data.rows[].createdDate | String | 创建时间 |
|
||
| data.rows[].parentJobId | String | 父作业 ID |
|
||
|
||
- **成功示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 1,
|
||
"rows": [
|
||
{
|
||
"apexClassId": "01p5g00000XxXxXxXx",
|
||
"apexClassName": "AccountControllerTest",
|
||
"status": "Completed",
|
||
"extendedStatus": "Success",
|
||
"methodNames": "testCreateAccount,testUpdateAccount",
|
||
"createdDate": "2026-02-05T10:30:00.000Z",
|
||
"parentJobId": "7075g00000YyYyYyYy"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_004:查询测试队列项失败
|
||
|
||
---
|
||
|
||
### 3. 查询 Apex 日志
|
||
|
||
**功能描述**:查询 Apex 日志信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/apex-logs`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| application | String | 否 | 应用名称 |
|
||
| location | String | 否 | 位置 |
|
||
| operation | String | 否 | 操作 |
|
||
| status | String | 否 | 状态 |
|
||
| startTime | String | 否 | 开始时间(ISO 8601 格式)|
|
||
| endTime | String | 否 | 结束时间(ISO 8601 格式)|
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败)|
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | Apex 日志列表 |
|
||
| data.rows[].id | String | 日志 ID |
|
||
| data.rows[].application | String | 应用名称 |
|
||
| data.rows[].durationMilliseconds | Integer | 持续时间(毫秒)|
|
||
| data.rows[].location | String | 位置 |
|
||
| data.rows[].logLength | Integer | 日志长度 |
|
||
| data.rows[].operation | String | 操作 |
|
||
| data.rows[].startTime | String | 开始时间 |
|
||
| data.rows[].status | String | 状态 |
|
||
|
||
- **成功示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 1,
|
||
"rows": [
|
||
{
|
||
"id": "07L5g00000XxXxXxXx",
|
||
"application": "Data Loader",
|
||
"durationMilliseconds": 1250,
|
||
"location": "System",
|
||
"logLength": 10240,
|
||
"operation": "executeAnonymous",
|
||
"startTime": "2026-02-05T10:30:00.000Z",
|
||
"status": "Success"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_005:查询 Apex 日志失败
|
||
|
||
---
|
||
|
||
### 4. 查询 Apex 类成员
|
||
|
||
**功能描述**:查询 Apex 类成员(ApexClassMember)信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/apex-class-member`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| contentEntityId | String | 否 | 内容实体 ID |
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败)|
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | 成员列表 |
|
||
| data.rows[].id | String | 成员 ID |
|
||
| data.rows[].body | String | 成员内容 |
|
||
| data.rows[].bodyCrc | Long | 内容 CRC 校验值 |
|
||
| data.rows[].contentEntityId | String | 内容实体 ID |
|
||
| data.rows[].contentType | String | 内容类型 |
|
||
| data.rows[].symbolTable | String | 符号表 |
|
||
|
||
- **成功示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 1,
|
||
"rows": [
|
||
{
|
||
"id": "4005g00000XxXxXxXx",
|
||
"body": "public class AccountController { ... }",
|
||
"bodyCrc": 1234567890,
|
||
"contentEntityId": "01p5g00000XxXxXxXx",
|
||
"contentType": "ApexClass",
|
||
"symbolTable": "{...}"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_006:查询 Apex 类成员失败
|
||
|
||
---
|
||
|
||
### 5. 查询 Apex 触发器成员
|
||
|
||
**功能描述**:查询 Apex 触发器成员(ApexTriggerMember)信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/apex-trigger-member`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| contentEntityId | String | 否 | 内容实体 ID |
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:同"查询 Apex 类成员"
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_007:查询 Apex 触发器成员失败
|
||
|
||
---
|
||
|
||
### 6. 查询 Visualforce 页面成员
|
||
|
||
**功能描述**:查询 Visualforce 页面成员(ApexPageMember)信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/apex-page-member`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| contentEntityId | String | 否 | 内容实体 ID |
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:同"查询 Apex 类成员"
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_008:查询 Visualforce 页面成员失败
|
||
|
||
---
|
||
|
||
### 7. 查询组件成员
|
||
|
||
**功能描述**:查询组件成员(ApexComponentMember)信息
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/apex-component-member`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| orgType | String | 是 | ORG 类型(source/target)|
|
||
| contentEntityId | String | 否 | 内容实体 ID |
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:同"查询 Apex 类成员"
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_002:获取 Tooling 连接失败
|
||
- TOOLING_DEVTOOLS_009:查询组件成员失败
|
||
|
||
---
|
||
|
||
### 8. 查询操作日志
|
||
|
||
**功能描述**:查询开发工具操作日志
|
||
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/api/tooling/devtools/operation-logs`
|
||
- **请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| operationType | String | 否 | 操作类型(QUERY_CODE_COVERAGE/QUERY_TEST_QUEUE/QUERY_APEX_LOG/QUERY_MEMBER)|
|
||
| metadataType | String | 否 | 元数据类型 |
|
||
| status | String | 否 | 状态(SUCCESS/FAILED)|
|
||
| startTime | String | 否 | 开始时间(ISO 8601 格式)|
|
||
| endTime | String | 否 | 结束时间(ISO 8601 格式)|
|
||
| pageNum | Integer | 否 | 页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页大小,默认 10 |
|
||
|
||
- **响应参数**:
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败)|
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | 操作日志列表 |
|
||
| data.rows[].id | Long | 日志 ID |
|
||
| data.rows[].operationType | String | 操作类型 |
|
||
| data.rows[].metadataType | String | 元数据类型 |
|
||
| data.rows[].metadataId | String | 元数据 ID |
|
||
| data.rows[].metadataName | String | 元数据名称 |
|
||
| data.rows[].queryCondition | String | 查询条件 |
|
||
| data.rows[].resultCount | Integer | 结果数量 |
|
||
| data.rows[].status | String | 状态 |
|
||
| data.rows[].errorCode | String | 错误码 |
|
||
| data.rows[].errorMessage | String | 错误消息 |
|
||
| data.rows[].operationTime | String | 操作时间 |
|
||
| data.rows[].userId | Long | 用户 ID |
|
||
|
||
- **成功示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 1,
|
||
"rows": [
|
||
{
|
||
"id": 1,
|
||
"operationType": "QUERY_CODE_COVERAGE",
|
||
"metadataType": "ApexCodeCoverage",
|
||
"metadataId": null,
|
||
"metadataName": "AccountTrigger",
|
||
"queryCondition": "ApexClassOrTrigger.Name LIKE '%AccountTrigger%'",
|
||
"resultCount": 2,
|
||
"status": "SUCCESS",
|
||
"errorCode": null,
|
||
"errorMessage": null,
|
||
"operationTime": "2026-02-05T10:30:00.000",
|
||
"userId": 1
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
- **错误码**:
|
||
- TOOLING_DEVTOOLS_010:查询操作日志失败
|
||
|
||
---
|
||
|
||
## 错误码
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| TOOLING_DEVTOOLS_001 | 查询条件不能为空 |
|
||
| TOOLING_DEVTOOLS_002 | 获取 Tooling 连接失败 |
|
||
| TOOLING_DEVTOOLS_003 | 查询代码覆盖率失败 |
|
||
| TOOLING_DEVTOOLS_004 | 查询测试队列项失败 |
|
||
| TOOLING_DEVTOOLS_005 | 查询 Apex 日志失败 |
|
||
| TOOLING_DEVTOOLS_006 | 查询 Apex 类成员失败 |
|
||
| TOOLING_DEVTOOLS_007 | 查询 Apex 触发器成员失败 |
|
||
| TOOLING_DEVTOOLS_008 | 查询 Visualforce 页面成员失败 |
|
||
| TOOLING_DEVTOOLS_009 | 查询组件成员失败 |
|
||
| TOOLING_DEVTOOLS_010 | 查询操作日志失败 |
|
||
| TOOLING_DEVTOOLS_011 | 记录操作日志失败 |
|
||
|
||
## 相关文档
|
||
- [需求文档](../requirements/sub/2026-01-28-004-03-开发工具功能.md)
|
||
- [设计文档](../design/2026-02-03-004-03-开发工具功能-设计.md)
|
||
- [决策文档](../decisions/2026-02-03-004-03-ADR-开发工具功能技术选型.md)
|
||
- [SQL 脚本](../sql/2026-02-03-004-03-开发工具操作日志.sql)
|
||
- [提示词文档](../prompts/2026-02-05-004-03-prompt-开发工具功能.md)
|
||
- [变更日志](../changelog/2026-02-05-004-03-changelog.md)
|
||
- [复盘文档](../retros/2026-02-05-004-03-retro.md)
|
||
- [会话记录](../sessions/2026-02-03-004-03-session.md)
|