datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-02-06-003-08-api.md

424 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 文档 - 描述和列出元数据
## 元数据
- 需求编号003-08
- 需求名称:描述和列出元数据
- 创建时间2026-02-06
- 创建人AI Assistant
- 状态:已完成
## API 概述
本文档描述了"描述和列出元数据"功能的 REST API 接口。该功能基于 Salesforce Metadata API提供了以下核心能力
1. **描述元数据DescribeMetadata**:获取当前 Salesforce Org 支持的所有元数据类型信息
2. **列出元数据ListMetadata**:获取指定元数据类型下的具体成员列表,支持分批处理
3. **查询历史History Query**:查询元数据操作的执行历史,支持审计和追溯
### 基础信息
- **基础路径**`/salesforce/metadata`
- **Content-Type**`application/json`
- **认证方式**:基于 Session 的认证(通过 `MetadataConnectionFactory` 管理)
## 接口列表
### 接口 1描述元数据
**功能描述**:获取当前 Salesforce Org 支持的所有元数据类型信息,包括元数据对象的类型、目录、子类型等详细信息。
**请求方式**GET
**请求路径**`/salesforce/metadata/describe`
**请求参数**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| apiVersion | Double | 否 | API 版本号,如 59.0。如果不传,使用 Salesforce 默认版本 |
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 描述元数据结果DescribeMetadataResult |
**DescribeMetadataResult 结构**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| metadataObjects | Array | 元数据对象列表DescribeMetadataObject[] |
| metadataObjectsWithMns | Array | 带命名空间的元数据对象列表DescribeMetadataObject[] |
| namespacePrefix | String | 命名空间前缀 |
| serverVersion | String | 服务器版本 |
**DescribeMetadataObject 结构**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| childXmlNames | Array | 子 XML 名称列表String[] |
| directoryName | String | 目录名称 |
| inFolder | Boolean | 是否在文件夹中 |
| metaFile | Boolean | 是否有元文件 |
| suffix | String | 文件后缀 |
| xmlName | String | XML 名称 |
**成功示例**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"metadataObjects": [
{
"childXmlNames": [],
"directoryName": "objects",
"inFolder": false,
"metaFile": false,
"suffix": "object",
"xmlName": "CustomObject"
},
{
"childXmlNames": [],
"directoryName": "classes",
"inFolder": false,
"metaFile": true,
"suffix": "cls",
"xmlName": "ApexClass"
}
],
"metadataObjectsWithMns": [],
"namespacePrefix": null,
"serverVersion": "59.0"
}
}
```
**失败示例**
```json
{
"code": 500,
"msg": "列出元数据失败: 连接超时",
"data": null
}
```
**错误码**
- DESCRIBE_001获取 Metadata 连接失败
- DESCRIBE_002描述元数据失败
- DESCRIBE_008未知错误
---
### 接口 2列出元数据
**功能描述**获取指定元数据类型及文件夹下的具体元数据成员列表。支持批量查询Service 层会自动分批处理(每次最多 3 个查询)。
**请求方式**POST
**请求路径**`/salesforce/metadata/list`
**请求参数**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| queries | Array | 是 | 查询列表ListMetadataQuery[]),至少包含一个查询 |
**ListMetadataQuery 结构**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| type | String | 是 | 元数据类型,如 "CustomObject", "ApexClass", "ApexTrigger" 等 |
| folder | String | 否 | 文件夹名称,用于查询文件夹内的元数据(如文档、报表等) |
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Array | 列出元数据结果列表ListMetadataResult[] |
**ListMetadataResult 结构**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| fullName | String | 完整名称 |
| type | String | 类型 |
| createdById | String | 创建者 ID |
| createdByName | String | 创建者名称 |
| createdDate | String | 创建日期ISO 8601 格式) |
| lastModifiedById | String | 最后修改者 ID |
| lastModifiedByName | String | 最后修改者名称 |
| lastModifiedDate | String | 最后修改日期ISO 8601 格式) |
| manageableState | String | 可管理状态 |
**成功示例**
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"fullName": "Account",
"type": "CustomObject",
"createdById": "005xx000001X9YZAA0",
"createdByName": "Admin User",
"createdDate": "2023-01-15T08:30:00.000Z",
"lastModifiedById": "005xx000001X9YZAA0",
"lastModifiedByName": "Admin User",
"lastModifiedDate": "2023-06-20T14:22:00.000Z",
"manageableState": "unmanaged"
},
{
"fullName": "Contact",
"type": "CustomObject",
"createdById": "005xx000001X9YZAA0",
"createdByName": "Admin User",
"createdDate": "2023-01-15T08:35:00.000Z",
"lastModifiedById": "005xx000001X9YZAA0",
"lastModifiedByName": "Admin User",
"lastModifiedDate": "2023-06-20T14:25:00.000Z",
"manageableState": "unmanaged"
}
]
}
```
**失败示例**
```json
{
"code": 500,
"msg": "查询列表不能为空",
"data": null
}
```
**错误码**
- DESCRIBE_003参数校验失败查询列表为空、元数据类型为空等
- DESCRIBE_006列出元数据失败
- DESCRIBE_008未知错误
---
### 接口 3获取元数据查询历史
**功能描述**:查询元数据描述和列出操作的执行历史,支持按操作类型筛选和限制返回数量。
**请求方式**GET
**请求路径**`/salesforce/metadata/describe/history`
**请求参数**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| operationType | String | 是 | 操作类型,可选值:"describe"(描述元数据)、"list"(列出元数据) |
| limit | Integer | 否 | 返回数量限制,默认 10最大 100 |
**响应参数**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Array | 查询历史列表DataiMetadataDescribe[] |
**DataiMetadataDescribe 结构**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | Long | 记录 ID |
| operationType | String | 操作类型describe/list |
| queryContent | String | 查询内容JSON 格式) |
| resultCount | Integer | 结果数量 |
| status | String | 状态Success/Failed |
| errorMessage | String | 错误信息 |
| serverVersion | String | 服务器版本 |
| namespacePrefix | String | 命名空间前缀 |
| metadataObjectCount | Integer | 元数据对象数量 |
| queryTime | String | 查询时间ISO 8601 格式) |
| createTime | String | 创建时间ISO 8601 格式) |
**成功示例**
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 1,
"operationType": "describe",
"queryContent": null,
"resultCount": null,
"status": "Success",
"errorMessage": null,
"serverVersion": "59.0",
"namespacePrefix": null,
"metadataObjectCount": 250,
"queryTime": "2026-02-06T10:30:00.000+08:00",
"createTime": "2026-02-06T10:30:00.000+08:00"
},
{
"id": 2,
"operationType": "list",
"queryContent": "[{\"type\":\"CustomObject\"}]",
"resultCount": 50,
"status": "Success",
"errorMessage": null,
"serverVersion": null,
"namespacePrefix": null,
"metadataObjectCount": null,
"queryTime": "2026-02-06T10:35:00.000+08:00",
"createTime": "2026-02-06T10:35:00.000+08:00"
}
]
}
```
**失败示例**
```json
{
"code": 500,
"msg": "无效的操作类型,必须是 describe 或 list",
"data": null
}
```
**错误码**
- DESCRIBE_003参数校验失败无效的操作类型
- DESCRIBE_008未知错误
---
## 错误码列表
| 错误码 | 错误信息 | 说明 |
|--------|----------|------|
| DESCRIBE_001 | 获取 Metadata 连接失败 | 无法获取 Salesforce Metadata 连接,可能是认证失败或网络问题 |
| DESCRIBE_002 | 描述元数据失败 | 调用 Salesforce describeMetadata API 失败 |
| DESCRIBE_003 | 参数校验失败 | 请求参数不符合要求(如查询列表为空、元数据类型为空、无效的操作类型等) |
| DESCRIBE_004 | 记录查询历史失败 | 写入数据库失败 |
| DESCRIBE_005 | 获取查询历史失败 | 从数据库查询历史记录失败 |
| DESCRIBE_006 | 列出元数据失败 | 调用 Salesforce listMetadata API 失败 |
| DESCRIBE_007 | 记录列出元数据历史失败 | 写入数据库失败 |
| DESCRIBE_008 | 未知错误 | 其他未预期的错误 |
## 使用示例
### 示例 1描述元数据
**请求**
```bash
curl -X GET "http://localhost:8080/salesforce/metadata/describe?apiVersion=59.0"
```
**响应**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"metadataObjects": [
{
"xmlName": "CustomObject",
"directoryName": "objects",
"suffix": "object",
"inFolder": false,
"metaFile": false
}
],
"serverVersion": "59.0"
}
}
```
### 示例 2列出元数据单个查询
**请求**
```bash
curl -X POST "http://localhost:8080/salesforce/metadata/list" \
-H "Content-Type: application/json" \
-d '[{"type": "CustomObject"}]'
```
**响应**
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"fullName": "Account",
"type": "CustomObject",
"createdByName": "Admin User",
"lastModifiedByName": "Admin User"
}
]
}
```
### 示例 3列出元数据多个查询自动分批
**请求**
```bash
curl -X POST "http://localhost:8080/salesforce/metadata/list" \
-H "Content-Type: application/json" \
-d '[
{"type": "CustomObject"},
{"type": "ApexClass"},
{"type": "ApexTrigger"},
{"type": "VisualforcePage"}
]'
```
**说明**:虽然请求包含 4 个查询,但 Service 层会自动分批处理(每次最多 3 个),对调用方透明。
### 示例 4获取查询历史
**请求**
```bash
curl -X GET "http://localhost:8080/salesforce/metadata/describe/history?operationType=list&limit=5"
```
**响应**
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 1,
"operationType": "list",
"queryContent": "[{\"type\":\"CustomObject\"}]",
"resultCount": 50,
"status": "Success",
"queryTime": "2026-02-06T10:30:00.000+08:00"
}
]
}
```
## 注意事项
1. **分批处理**listMetadata 接口支持批量查询,但 Salesforce API 限制每次调用最多包含 3 个查询。Service 层会自动分批处理,对调用方透明。
2. **查询历史**:每次 describeMetadata 和 listMetadata 操作都会自动记录到数据库,包括操作类型、查询内容、结果数量、状态等信息。
3. **错误处理**:所有接口都遵循统一的错误处理规范,返回包含错误码和错误信息的 JSON 响应。
4. **性能考虑**
- describeMetadata 操作会返回大量元数据类型信息,建议在应用启动时缓存结果
- listMetadata 操作涉及外部 API 调用,响应时间取决于查询的复杂度和数据量
- 查询历史接口默认返回 10 条记录,最大支持 100 条
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-003-08-描述和列出元数据.md)
- [设计文档](../design/2026-02-03-003-08-描述和列出元数据-设计.md)
- [决策记录](../decisions/2026-02-03-003-08-ADR-描述和列出元数据技术选型.md)
- [变更日志](../changelog/2026-02-06-003-08-changelog.md)
- [复盘文档](../retros/2026-02-06-003-08-retro.md)
- [会话记录](../sessions/2026-02-03-003-08-session.md)