datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-02-03-004-01-api.md

528 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API 文档
## 元数据
- 需求编号004-01
- 文档版本v1.0.0
- 创建时间2026-02-03
- 创建人AI Assistant
- 状态:已完成
## API 概述
### 功能描述
Tooling API 连接管理模块提供 Salesforce Tooling API 的连接管理功能,包括获取连接、清除缓存、测试连接、设置调用选项、设置调试头部等核心功能。
### 基础信息
- **基础路径**`/salesforce/tooling/connection`
- **协议**HTTPS
- **数据格式**JSON
- **字符编码**UTF-8
### 认证方式
- 使用 JWT Token 进行身份认证
- Token 通过登录接口获取
- 需要在请求头中携带 `Authorization: Bearer {token}`
### 权限控制
- 使用 Spring Security 进行权限控制
- 每个接口都有对应的权限标识
- 权限格式:`tooling:connection:{操作}`
## 接口列表
### 1. 获取连接
#### 接口说明
获取 Tooling API 连接,如果缓存中没有有效连接,则创建新连接。
#### 请求信息
- **请求方式**GET
- **请求路径**`/salesforce/tooling/connection/get`
- **权限标识**`tooling:connection:get`
#### 请求参数
#### 响应参数
##### 成功响应HTTP 200
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 表示成功) |
| msg | String | 提示信息 |
| data | Object | 连接结果对象 |
| data.success | Boolean | 是否成功 |
| data.connectionId | String | 连接 ID |
| data.sessionId | String | Session ID脱敏处理 |
| data.instanceUrl | String | Salesforce 实例 URL |
| data.connectionTime | String | 连接时间格式yyyy-MM-dd HH:mm:ss |
| data.client | String | 客户端名称 |
| data.debugLevel | String | 调试级别 |
##### 失败响应HTTP 200业务错误
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(非 200 表示失败) |
| msg | String | 错误信息 |
#### 成功示例
```json
{
"code": 200,
"msg": "获取连接成功",
"data": {
"success": true,
"connectionId": "conn_1234567890",
"sessionId": "00D...",
"instanceUrl": "https://xxxxx.my.salesforce.com",
"connectionTime": "2026-02-03 10:30:00",
"client": "DataiToolingClient",
"debugLevel": "DEBUG"
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "获取连接失败: Session 无效或已过期"
}
```
#### 错误码
- `TOOLING_CONN_001`Session 无效或已过期
- `TOOLING_CONN_002`:连接创建失败
- `TOOLING_CONN_006`:用户未登录
---
### 2. 清除连接缓存
#### 接口说明
清除缓存的 Tooling API 连接。
#### 请求信息
- **请求方式**DELETE
- **请求路径**`/salesforce/tooling/connection/clear`
- **权限标识**`tooling:connection:clear`
#### 请求参数
#### 响应参数
##### 成功响应HTTP 200
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 表示成功) |
| msg | String | 提示信息 |
##### 失败响应HTTP 200业务错误
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(非 200 表示失败) |
| msg | String | 错误信息 |
#### 成功示例
```json
{
"code": 200,
"msg": "清除连接缓存成功"
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "清除连接缓存失败: 无权限操作"
}
```
#### 错误码
- `TOOLING_CONN_004`:权限不足
---
### 3. 测试连接
#### 接口说明
测试 Tooling API 连接是否有效。
#### 请求信息
- **请求方式**GET
- **请求路径**`/salesforce/tooling/connection/test`
- **权限标识**`tooling:connection:test`
#### 请求参数
#### 响应参数
##### 成功响应HTTP 200
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 表示成功) |
| msg | String | 提示信息 |
| data | Object | 测试结果对象 |
| data.success | Boolean | 是否成功 |
| data.valid | Boolean | 连接是否有效 |
| data.testTime | String | 测试时间格式yyyy-MM-dd HH:mm:ss |
| data.responseTime | Long | 响应时间(毫秒) |
| data.errorCode | String | 错误码(失败时返回) |
| data.errorMessage | String | 错误消息(失败时返回) |
##### 失败响应HTTP 200业务错误
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(非 200 表示失败) |
| msg | String | 错误信息 |
#### 成功示例
```json
{
"code": 200,
"msg": "测试连接成功",
"data": {
"success": true,
"valid": true,
"testTime": "2026-02-03 10:35:00",
"responseTime": 150
}
}
```
#### 失败示例
```json
{
"code": 200,
"msg": "测试连接成功",
"data": {
"success": true,
"valid": false,
"testTime": "2026-02-03 10:35:00",
"responseTime": 50,
"errorCode": "TOOLING_CONN_001",
"errorMessage": "Session 无效或已过期"
}
}
```
#### 错误码
- `TOOLING_CONN_001`Session 无效或已过期
- `TOOLING_CONN_003`:网络超时
---
### 4. 设置调用选项
#### 接口说明
设置 Tooling API 连接的调用选项。
#### 请求信息
- **请求方式**POST
- **请求路径**`/salesforce/tooling/connection/call-options`
- **权限标识**`tooling:connection:callOptions`
- **Content-Type**`application/json`
#### 请求参数
##### Body 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| client | String | 否 | 客户端名称,用于标识调用来源 |
#### 请求示例
```json
{
"client": "DataiToolingClient"
}
```
#### 响应参数
##### 成功响应HTTP 200
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 表示成功) |
| msg | String | 提示信息 |
| data | Object | 设置结果对象 |
| data.success | Boolean | 是否成功 |
| data.client | String | 设置的客户端名称 |
##### 失败响应HTTP 200业务错误
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(非 200 表示失败) |
| msg | String | 错误信息 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置调用选项成功",
"data": {
"success": true,
"client": "DataiToolingClient"
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置调用选项失败: 连接无效"
}
```
#### 错误码
- `TOOLING_CONN_001`Session 无效或已过期
- `TOOLING_CONN_007`:设置调用选项失败
---
### 5. 设置调试头部
#### 接口说明
设置 Tooling API 连接的调试头部。
#### 请求信息
- **请求方式**POST
- **请求路径**`/salesforce/tooling/connection/debugging-header`
- **权限标识**`tooling:connection:debuggingHeader`
- **Content-Type**`application/json`
#### 请求参数
##### Body 参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| debugLevel | String | 否 | 调试级别可选值NONE、DEBUG、DB、DETAIL、PROFILING |
#### 调试级别说明
| 级别 | 说明 |
|------|------|
| NONE | 不记录调试信息 |
| DEBUG | 记录基本调试信息 |
| DB | 记录数据库操作信息 |
| DETAIL | 记录详细信息 |
| PROFILING | 记录性能分析信息 |
#### 请求示例
```json
{
"debugLevel": "DEBUG"
}
```
#### 响应参数
##### 成功响应HTTP 200
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 表示成功) |
| msg | String | 提示信息 |
| data | Object | 设置结果对象 |
| data.success | Boolean | 是否成功 |
| data.debugLevel | String | 设置的调试级别 |
##### 失败响应HTTP 200业务错误
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(非 200 表示失败) |
| msg | String | 错误信息 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置调试头部成功",
"data": {
"success": true,
"debugLevel": "DEBUG"
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置调试头部失败: 无效的调试级别"
}
```
#### 错误码
- `TOOLING_CONN_001`Session 无效或已过期
- `TOOLING_CONN_008`:设置调试头部失败
---
## 错误码
### 错误码列表
| 错误码 | 错误消息 | 说明 |
|--------|----------|------|
| TOOLING_CONN_001 | Session 无效或已过期 | 当前用户的 Session 已过期或无效,需要重新登录 |
| TOOLING_CONN_002 | 连接创建失败 | 创建 ToolingConnection 时发生错误 |
| TOOLING_CONN_003 | 网络超时 | 与 Salesforce API 通信超时 |
| TOOLING_CONN_004 | 权限不足 | 当前用户没有执行该操作的权限 |
| TOOLING_CONN_005 | API 版本不支持 | 请求的 API 版本不被支持 |
| TOOLING_CONN_006 | 用户未登录 | 用户未登录或登录状态已失效 |
| TOOLING_CONN_007 | 设置调用选项失败 | 设置 CallOptions 时发生错误 |
| TOOLING_CONN_008 | 设置调试头部失败 | 设置 DebuggingHeader 时发生错误 |
### 错误码使用场景
#### TOOLING_CONN_001 - Session 无效或已过期
- **触发场景**
- 用户 Session 已过期
- Session ID 被篡改
- Salesforce 端 Session 被注销
- **处理建议**
- 提示用户重新登录
- 自动刷新 Session如果支持
#### TOOLING_CONN_002 - 连接创建失败
- **触发场景**
- Instance URL 无效
- Session ID 无效
- 网络异常
- **处理建议**
- 检查 Salesforce 配置
- 检查网络连接
- 查看详细错误日志
#### TOOLING_CONN_003 - 网络超时
- **触发场景**
- 网络延迟过高
- Salesforce 服务响应慢
- 请求数据量过大
- **处理建议**
- 检查网络连接
- 增加超时时间配置
- 分批处理大数据量请求
#### TOOLING_CONN_004 - 权限不足
- **触发场景**
- 用户没有对应接口的权限
- 权限配置未同步到数据库
- **处理建议**
- 联系管理员分配权限
- 检查权限配置是否正确
#### TOOLING_CONN_005 - API 版本不支持
- **触发场景**
- 请求的 API 版本过低或过高
- **处理建议**
- 使用支持的 API 版本
- 查看 Salesforce API 版本文档
#### TOOLING_CONN_006 - 用户未登录
- **触发场景**
- 用户未登录
- Token 已过期
- Token 被篡改
- **处理建议**
- 提示用户登录
- 刷新 Token
#### TOOLING_CONN_007 - 设置调用选项失败
- **触发场景**
- 连接无效
- 参数格式错误
- **处理建议**
- 先获取有效连接
- 检查参数格式
#### TOOLING_CONN_008 - 设置调试头部失败
- **触发场景**
- 连接无效
- 调试级别无效
- **处理建议**
- 先获取有效连接
- 使用有效的调试级别
## 使用示例
### 场景 1获取连接并测试
```java
// 步骤 1获取连接
GET /salesforce/tooling/connection/get
// 步骤 2测试连接
GET /salesforce/tooling/connection/test
```
### 场景 2设置调试选项后执行操作
```java
// 步骤 1设置调试级别
POST /salesforce/tooling/connection/debugging-header
{
"debugLevel": "DEBUG"
}
// 步骤 2设置客户端名称
POST /salesforce/tooling/connection/call-options
{
"client": "MyApplication"
}
// 步骤 3执行 Tooling API 操作
// ... 其他 Tooling API 调用
// 步骤 4清除调试设置可选
POST /salesforce/tooling/connection/debugging-header
{
"debugLevel": "NONE"
}
```
### 场景 3连接异常时重新获取
```java
// 步骤 1测试连接
GET /salesforce/tooling/connection/test
// 如果返回 valid=false
// 步骤 2清除缓存
DELETE /salesforce/tooling/connection/clear
// 步骤 3重新获取连接
GET /salesforce/tooling/connection/get
```
## 注意事项
### 1. 连接缓存
- 连接会缓存在内存中,避免重复创建
- 应用重启后缓存会丢失
- Session 过期时会自动重新创建连接
### 2. 线程安全
- 连接缓存使用 ConcurrentHashMap线程安全
- 多个线程可以同时获取连接
- 但每个线程应该使用自己的连接实例
### 3. 性能建议
- 在应用启动时预获取连接
- 定期测试连接有效性
- 避免频繁清除缓存
### 4. 安全建议
- Session ID 在日志中会被脱敏处理
- 不要在客户端暴露 Session ID
- 使用 HTTPS 协议传输数据
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-004-01-连接管理.md)
- [设计文档](../design/2026-02-03-004-01-连接管理-设计.md)
- [决策记录](../decisions/2026-02-03-004-01-ADR-连接管理技术选型.md)
- [变更日志](../changelog/2026-02-03-004-01-changelog.md)
- [复盘文档](../retros/2026-02-03-004-01-retro.md)