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

530 lines
13 KiB
Markdown
Raw Normal View History

# API 文档
## 元数据
- 需求编号003
- 子需求编号003-01
- 子需求名称:连接管理
- 创建时间2026-02-05
- 创建人AI Assistant
- 版本号v1.0.0
- 接口基地址:`/api/metadata/connection`
## API 概述
Metadata API 连接管理接口提供对 Salesforce Metadata API 连接的管理能力,包括连接状态的获取、连接测试、连接刷新、连接关闭、调用选项设置、连接历史记录查询和连接缓存清除等功能。
### 核心功能
1. **连接状态管理**:获取当前 Metadata API 连接的状态信息
2. **连接测试**:测试 Metadata API 连接是否可用
3. **连接刷新**:刷新 Metadata API 连接,重新创建连接实例
4. **连接关闭**:关闭 Metadata API 连接,释放资源
5. **调用选项设置**:设置 Metadata API 的调用选项(如客户端名称)
6. **连接历史记录**:查询 Metadata API 连接的历史记录
7. **连接缓存管理**:清除 Metadata API 连接缓存
### 认证方式
所有接口都需要通过认证,使用 Spring Security 进行权限控制。请求头中需要包含有效的 JWT Token。
### 权限要求
每个接口都有特定的权限要求,使用 `@PreAuthorize` 注解进行控制。
## 接口列表
### 1. 获取连接状态
**功能描述**:获取当前 Metadata API 连接的状态信息,包括连接是否有效、最后测试时间、响应时间等。
**请求方式**GET
**请求路径**`/api/metadata/connection/status`
**权限要求**`metadata:connection:status`
**请求参数**:无
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| 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.errorMessage | String | 错误信息(如果有) |
**成功示例**
```json
{
"code": 200,
"msg": "获取连接状态成功",
"data": {
"success": true,
"valid": true,
"testTime": "2026-02-05 14:30:00",
"responseTime": 150,
"errorMessage": null
}
}
```
**失败示例**
```json
{
"code": 500,
"msg": "获取连接状态失败: 用户未登录或会话已过期",
"data": null
}
```
**错误码**
- 200成功
- 500服务器内部错误
- 401未授权
- 403权限不足
---
### 2. 测试连接
**功能描述**:测试 Metadata API 连接是否可用,会实际调用 Salesforce API 进行验证。
**请求方式**POST
**请求路径**`/api/metadata/connection/test`
**权限要求**`metadata:connection:test`
**请求参数**:无
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据(成功时为 null |
**成功示例**
```json
{
"code": 200,
"msg": "连接测试成功",
"data": null
}
```
**失败示例**
```json
{
"code": 500,
"msg": "连接测试失败: 无法连接到 Salesforce 服务器",
"data": null
}
```
**错误码**
- 200连接测试成功
- 500连接测试失败
**调用场景**
- 系统启动时自动测试连接
- 用户手动测试连接状态
- 定时任务检查连接健康状态
---
### 3. 刷新连接
**功能描述**:刷新 Metadata API 连接,关闭现有连接并重新创建。适用于会话过期或需要重新建立连接的场景。
**请求方式**POST
**请求路径**`/api/metadata/connection/refresh`
**权限要求**`metadata:connection:refresh`
**请求参数**:无
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据(成功时为 null |
**成功示例**
```json
{
"code": 200,
"msg": "刷新连接成功",
"data": null
}
```
**失败示例**
```json
{
"code": 500,
"msg": "刷新连接失败: 会话已过期",
"data": null
}
```
**错误码**
- 200刷新连接成功
- 500刷新连接失败
**调用场景**
- 会话过期后重新建立连接
- 连接出现异常时恢复连接
- 切换 org 类型后重新连接
---
### 4. 关闭连接
**功能描述**:关闭 Metadata API 连接,释放相关资源。关闭后需要调用刷新接口重新建立连接。
**请求方式**POST
**请求路径**`/api/metadata/connection/close`
**权限要求**`metadata:connection:close`
**请求参数**:无
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据(成功时为 null |
**成功示例**
```json
{
"code": 200,
"msg": "关闭连接成功",
"data": null
}
```
**失败示例**
```json
{
"code": 500,
"msg": "关闭连接失败: 连接不存在",
"data": null
}
```
**错误码**
- 200关闭连接成功
- 500关闭连接失败
**调用场景**
- 系统关闭时释放资源
- 切换用户时关闭旧连接
- 长时间不使用时释放连接
---
### 5. 设置调用选项
**功能描述**:设置 Metadata API 的调用选项,如客户端名称等。这些选项会影响 API 调用的行为。
**请求方式**POST
**请求路径**`/api/metadata/connection/call-options`
**权限要求**`metadata:connection:callOptions`
**请求参数**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| client | String | 是 | 客户端名称,用于标识调用来源 |
**请求示例**
```json
{
"client": "DataiMetadataClient"
}
```
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据(成功时为 null |
**成功示例**
```json
{
"code": 200,
"msg": "设置调用选项成功",
"data": null
}
```
**失败示例**
```json
{
"code": 500,
"msg": "设置调用选项失败: 客户端名称不能为空",
"data": null
}
```
**错误码**
- 200设置调用选项成功
- 400请求参数错误
- 500设置调用选项失败
**调用场景**
- 初始化连接时设置客户端标识
- 多客户端环境下区分调用来源
- 监控和日志记录时标识客户端
---
### 6. 获取连接历史记录
**功能描述**:获取 Metadata API 连接的历史记录,包括连接创建、测试、刷新、关闭等操作的记录。
**请求方式**GET
**请求路径**`/api/metadata/connection/history`
**权限要求**`metadata:connection:history`
**请求参数**:无
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Array | 连接历史记录列表 |
| data[].id | Long | 记录 ID |
| data[].orgType | String | ORG 类型source/target |
| data[].status | String | 连接状态connected/failed/closed |
| data[].testTime | String | 测试时间格式yyyy-MM-dd HH:mm:ss |
| data[].responseTime | Long | 响应时间(毫秒) |
| data[].errorMessage | String | 错误信息(如果有) |
| data[].createTime | String | 记录创建时间 |
| data[].updateTime | String | 记录更新时间 |
**成功示例**
```json
{
"code": 200,
"msg": "获取连接历史成功",
"data": [
{
"id": 1,
"orgType": "source",
"status": "connected",
"testTime": "2026-02-05 14:30:00",
"responseTime": 150,
"errorMessage": null,
"createTime": "2026-02-05 14:30:00",
"updateTime": "2026-02-05 14:30:00"
},
{
"id": 2,
"orgType": "source",
"status": "failed",
"testTime": "2026-02-05 14:25:00",
"responseTime": 0,
"errorMessage": "会话已过期",
"createTime": "2026-02-05 14:25:00",
"updateTime": "2026-02-05 14:25:00"
}
]
}
```
**失败示例**
```json
{
"code": 500,
"msg": "获取连接历史失败: 数据库连接错误",
"data": null
}
```
**错误码**
- 200获取连接历史成功
- 500获取连接历史失败
**调用场景**
- 监控连接健康状态
- 排查连接问题
- 分析连接使用模式
---
### 7. 清除连接缓存
**功能描述**:清除 Metadata API 连接缓存,强制下次请求时重新创建连接。适用于连接状态异常或需要强制刷新连接的场景。
**请求方式**DELETE
**请求路径**`/api/metadata/connection/cache`
**权限要求**`metadata:connection:clear`
**请求参数**:无
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 响应数据(成功时为 null |
**成功示例**
```json
{
"code": 200,
"msg": "清除连接缓存成功",
"data": null
}
```
**失败示例**
```json
{
"code": 500,
"msg": "清除连接缓存失败: 缓存不存在",
"data": null
}
```
**错误码**
- 200清除连接缓存成功
- 500清除连接缓存失败
**调用场景**
- 连接状态异常时强制刷新
- 切换 org 配置后清除旧缓存
- 调试和测试时重置连接状态
---
## 错误码
### 系统错误码
| 错误码 | 说明 | 处理建议 |
|--------|------|----------|
| 200 | 操作成功 | 无需处理 |
| 400 | 请求参数错误 | 检查请求参数是否符合要求 |
| 401 | 未授权 | 检查 JWT Token 是否有效 |
| 403 | 权限不足 | 检查用户是否有该接口的权限 |
| 404 | 资源不存在 | 检查请求路径是否正确 |
| 500 | 服务器内部错误 | 查看服务器日志,联系管理员 |
### 业务错误码
| 错误码 | 说明 | 处理建议 |
|--------|------|----------|
| METADATA_CONNECTION_ERROR | Metadata API 连接错误 | 检查网络连接和 Salesforce 服务状态 |
| METADATA_AUTH_ERROR | Metadata API 认证错误 | 检查 Session 是否过期,尝试重新登录 |
| METADATA_OPERATION_ERROR | Metadata API 操作错误 | 检查操作参数是否正确 |
| SESSION_EXPIRED | 会话已过期 | 重新登录获取新的 Session |
| INVALID_SESSION | 无效的会话 | 检查 Session ID 是否正确 |
| CONNECTION_FAILED | 连接失败 | 检查网络连接和服务器地址 |
## 调用示例
### 完整调用流程
```java
// 1. 获取连接状态
GET /api/metadata/connection/status
Response: {
"code": 200,
"msg": "获取连接状态成功",
"data": {
"valid": true,
"testTime": "2026-02-05 14:30:00"
}
}
// 2. 如果连接无效,刷新连接
POST /api/metadata/connection/refresh
Response: {
"code": 200,
"msg": "刷新连接成功"
}
// 3. 测试连接
POST /api/metadata/connection/test
Response: {
"code": 200,
"msg": "连接测试成功"
}
// 4. 设置调用选项
POST /api/metadata/connection/call-options
Request Body: {
"client": "DataiMetadataClient"
}
Response: {
"code": 200,
"msg": "设置调用选项成功"
}
// 5. 执行业务操作(如部署元数据)
// ...
// 6. 关闭连接
POST /api/metadata/connection/close
Response: {
"code": 200,
"msg": "关闭连接成功"
}
```
## 性能指标
### 响应时间
- 获取连接状态:< 100ms
- 测试连接:< 2s取决于网络状况
- 刷新连接:< 3s取决于网络状况
- 关闭连接:< 100ms
- 设置调用选项:< 100ms
- 获取连接历史:< 500ms
- 清除连接缓存:< 100ms
### 并发限制
- 单个用户同时只能有一个活跃的 Metadata API 连接
- 连接缓存按 orgType 进行隔离
- 建议在高并发场景下使用连接池(后续版本支持)
## 注意事项
1. **会话管理**:所有接口都依赖有效的 Salesforce 会话,请确保在调用前先完成认证
2. **连接缓存**:连接会被缓存以提高性能,如需强制刷新请使用清除缓存接口
3. **错误处理**:建议对所有接口的错误情况进行处理,特别是认证错误和连接错误
4. **资源释放**:长时间不使用连接时,建议调用关闭连接接口释放资源
5. **历史记录**:连接历史记录会持久化到数据库,可用于监控和审计
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-003-01-连接管理.md)
- [设计文档](../design/2026-02-02-003-01-连接管理-设计.md)
- [决策记录](../decisions/2026-02-02-003-01-ADR-连接管理技术选型.md)
- [变更日志](../changelog/2026-02-05-003-01-changelog.md)
- [复盘文档](../retros/2026-02-05-003-01-retro.md)
- [会话记录](../sessions/2026-01-28-003-session.md)