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

544 lines
12 KiB
Markdown
Raw Permalink 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 文档 - Apex 连接管理
## 元数据
- 需求编号002-01
- 需求名称Apex 连接管理
- 创建时间2026-02-02
- 创建人AI Assistant
- 版本v1.0.0
## API 概述
本 API 文档描述了 Salesforce Apex API 连接管理接口,提供了完整的连接管理功能,包括连接获取、会话头设置、调用选项配置、调试头部配置、字段截断头配置、包版本头配置和连接缓存清除等功能。
### 核心功能
- **连接工厂**:创建和管理 SoapConnection 实例
- **会话头管理**:设置和更新 SessionHeader
- **调用选项**:配置 CallOptions 头部
- **调试头部**:配置 DebuggingHeader 用于调试
- **字段截断头**:配置 AllowFieldTruncationHeader
- **包版本头**:配置 PackageVersionHeader
- **连接缓存**:使用 AbstractConnectionFactory 提供的缓存机制
### 技术特性
- 固定使用 source org 类型
- 继承 AbstractConnectionFactory<SoapConnection>,复用缓存机制
- 使用 Salesforce API 65.0 版本
- 连接超时 60 秒,读取超时 60 秒
- 支持连接压缩
### 安全特性
- 使用 Spring Security 进行权限控制
- 使用 @PreAuthorize 注解进行方法级权限控制
- 使用 @Valid 注解进行参数校验
- 统一的异常处理机制
## 接口列表
### 接口 1获取连接
#### 功能描述
获取 SoapConnection 连接信息,包括会话 ID、服务器 URL、连接状态等信息。
#### 请求方式
GET
#### 请求路径
`/api/apex/connection`
#### 权限要求
`apex:connection:get`
#### 请求参数
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.sessionId | String | 会话 ID前 20 位) |
| data.serverUrl | String | 服务器 URL |
| data.success | Boolean | 是否成功 |
| data.errorMessage | String | 错误信息(成功时为 null |
#### 成功示例
```json
{
"code": 200,
"msg": "获取连接成功",
"data": {
"sessionId": "00Dxx0000001Gw2!AQ0AQH...",
"serverUrl": "https://datai-dev-ed.my.salesforce.com",
"success": true,
"errorMessage": null
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "获取连接失败: 未找到 source org 的会话信息,请先登录"
}
```
---
### 接口 2设置会话头
#### 功能描述
设置 SoapConnection 的会话头SessionHeader用于指定会话 ID。
#### 请求方式
POST
#### 请求路径
`/api/apex/connection/session-header`
#### 权限要求
`apex:connection:session`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| sessionId | String | 是 | 会话 ID长度 1-255 字符 |
#### 请求示例
```json
{
"sessionId": "00Dxx0000001Gw2!AQ0AQH..."
}
```
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.success | Boolean | 是否成功 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置会话头成功",
"data": {
"success": true
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置会话头失败: 未找到连接"
}
```
---
### 接口 3设置调用选项
#### 功能描述
设置 SoapConnection 的调用选项CallOptions用于指定客户端名称。
#### 请求方式
POST
#### 请求路径
`/api/apex/connection/call-options`
#### 权限要求
`apex:connection:call`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| client | String | 否 | 客户端名称,长度 1-255 字符 |
#### 请求示例
```json
{
"client": "DataiSalesforceApex/1.0.0"
}
```
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.success | Boolean | 是否成功 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置调用选项成功",
"data": {
"success": true
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置调用选项失败: 未找到连接"
}
```
---
### 接口 4设置调试头部
#### 功能描述
设置 SoapConnection 的调试头部DebuggingHeader用于调试和日志记录。
#### 请求方式
POST
#### 请求路径
`/api/apex/connection/debugging-header`
#### 权限要求
`apex:connection:debug`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| logCategories | Array | 否 | 日志分类数组 |
| logCategories[].category | String | 否 | 日志分类DB、VALIDATION、WORKFLOW、CALLOUT、APEX_CODE |
| logCategories[].level | String | 否 | 日志级别FINE、FINER、FINEST、DEBUG、INFO、WARN、ERROR |
| logType | String | 否 | 日志类型PROFILING、DEBUGONLY |
#### 请求示例
```json
{
"logCategories": [
{
"category": "DB",
"level": "FINE"
},
{
"category": "APEX_CODE",
"level": "DEBUG"
}
],
"logType": "PROFILING"
}
```
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.success | Boolean | 是否成功 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置调试头部成功",
"data": {
"success": true
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置调试头部失败: 未找到连接"
}
```
---
### 接口 5设置字段截断头
#### 功能描述
设置 SoapConnection 的字段截断头AllowFieldTruncationHeader用于控制字段截断行为。
#### 请求方式
POST
#### 请求路径
`/api/apex/connection/field-truncation-header`
#### 权限要求
`apex:connection:truncate`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| allowFieldTruncation | Boolean | 否 | 是否允许字段截断true允许false不允许 |
#### 请求示例
```json
{
"allowFieldTruncation": true
}
```
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.success | Boolean | 是否成功 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置字段截断头成功",
"data": {
"success": true
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置字段截断头失败: 未找到连接"
}
```
---
### 接口 6设置包版本头
#### 功能描述
设置 SoapConnection 的包版本头PackageVersionHeader用于指定包版本信息。
#### 请求方式
POST
#### 请求路径
`/api/apex/connection/package-version-header`
#### 权限要求
`apex:connection:version`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| packageVersions | Array | 否 | 包版本数组 |
| packageVersions[].namespace | String | 否 | 包命名空间 |
| packageVersions[].majorNumber | Integer | 否 | 主版本号 |
| packageVersions[].minorNumber | Integer | 否 | 次版本号 |
| packageVersions[].namespacePrefix | String | 否 | 命名空间前缀 |
#### 请求示例
```json
{
"packageVersions": [
{
"namespace": "MyPackage",
"majorNumber": 1,
"minorNumber": 0,
"namespacePrefix": "mypkg"
}
]
}
```
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.success | Boolean | 是否成功 |
#### 成功示例
```json
{
"code": 200,
"msg": "设置包版本头成功",
"data": {
"success": true
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "设置包版本头失败: 未找到连接"
}
```
---
### 接口 7清除连接缓存
#### 功能描述
清除 Apex 连接缓存,强制重新创建连接。
#### 请求方式
DELETE
#### 请求路径
`/api/apex/connection/cache`
#### 权限要求
`apex:connection:clear`
#### 请求参数
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据 |
| data.success | Boolean | 是否成功 |
#### 成功示例
```json
{
"code": 200,
"msg": "清除连接缓存成功",
"data": {
"success": true
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "清除连接缓存失败: 清除缓存失败"
}
```
## 错误码
### 通用错误码
| 错误码 | 错误信息 | 说明 |
|--------|----------|------|
| 200 | 操作成功 | 请求处理成功 |
| 400 | 请求参数错误 | 请求参数格式错误或缺少必填参数 |
| 401 | 未授权 | 用户未登录或登录已过期 |
| 403 | 无权限 | 用户没有访问该接口的权限 |
| 500 | 服务器内部错误 | 服务器处理请求时发生错误 |
### 业务错误码
| 错误码 | 错误信息 | 说明 |
|--------|----------|------|
| 501 | 未找到 source org 的会话信息 | 请先登录 source org |
| 502 | 未找到连接 | 连接不存在或已失效 |
| 503 | 创建连接失败 | 创建连接时发生错误 |
| 504 | 设置会话头失败 | 设置会话头时发生错误 |
| 505 | 设置调用选项失败 | 设置调用选项时发生错误 |
| 506 | 设置调试头部失败 | 设置调试头部时发生错误 |
| 507 | 设置字段截断头失败 | 设置字段截断头时发生错误 |
| 508 | 设置包版本头失败 | 设置包版本头时发生错误 |
| 509 | 清除连接缓存失败 | 清除连接缓存时发生错误 |
### 参数校验错误码
| 错误码 | 错误信息 | 说明 |
|--------|----------|------|
| 601 | 会话ID不能为空 | 设置会话头时,会话 ID 参数为空 |
## 相关文档
### 需求文档
- [Apex 连接管理需求](../requirements/sub/2026-01-28-002-01-连接管理.md)
### 设计文档
- [Apex 连接管理设计](../design/2026-02-02-002-01-连接管理-设计.md)
### 决策记录
- [Apex 连接管理技术选型](../decisions/2026-02-02-002-01-ADR-Apex连接管理技术选型.md)
### 复盘文档
- [Apex 连接管理复盘](../retros/2026-02-02-002-01-retro.md)
## 附录
### Swagger 文档访问
启动应用后,可以通过以下 URL 访问 Swagger UI
- Swagger UI: `http://localhost:8080/swagger-ui.html`
- API JSON: `http://localhost:8080/v3/api-docs`
### Postman 集合
可以使用 Postman 导入以下集合进行 API 测试:
```json
{
"info": {
"name": "Apex Connection Management",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "获取连接",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{baseUrl}}/api/apex/connection",
"host": ["{{baseUrl}}"],
"path": ["api", "apex", "connection"]
}
}
},
{
"name": "设置会话头",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"sessionId\": \"00Dxx0000001Gw2!AQ0AQH...\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/apex/connection/session-header",
"host": ["{{baseUrl}}"],
"path": ["api", "apex", "connection", "session-header"]
}
}
}
]
}
```
### 权限配置
在使用这些 API 接口之前,需要在系统中配置相应的权限:
- `apex:connection:get` - 获取连接权限
- `apex:connection:session` - 设置会话头权限
- `apex:connection:call` - 设置调用选项权限
- `apex:connection:debug` - 设置调试头部权限
- `apex:connection:truncate` - 设置字段截断头权限
- `apex:connection:version` - 设置包版本头权限
- `apex:connection:clear` - 清除连接缓存权限
### 认证说明
所有 API 接口都需要进行身份认证,请在请求头中添加以下认证信息:
```
Authorization: Bearer {token}
```
其中 `{token}` 为登录后获取的 JWT 令牌。