business_domain_api.md 20 KB

业务领域 API 接口文档

本文档为前端开发人员提供业务领域(Business Domain)模块的 API 接口说明。

目录


通用说明

基础URL

/api/bd

统一响应格式

成功响应:

{
  "code": 200,
  "message": "操作成功",
  "data": { ... }
}

失败响应:

{
  "code": 500,
  "message": "错误描述",
  "data": null,
  "error": "详细错误信息"
}

请求头

大部分接口需要设置 Content-Type:

Content-Type: application/json

文件上传接口需要设置:

Content-Type: multipart/form-data

接口列表

1. 获取业务领域列表

获取业务领域的分页列表,支持多种过滤条件。

请求URL: POST /api/bd/list

请求参数:

参数名 类型 必填 默认值 说明
current integer 1 当前页码
size integer 10 每页大小
name_en string - 英文名称过滤条件
name_zh string - 中文名称过滤条件
type string "all" 类型过滤条件,"all"表示不过滤
category string - 分类过滤条件
tag string - 标签过滤条件

返回参数:

参数名 类型 说明
code integer 状态码
message string 消息
data.records array 业务领域列表
data.total integer 总数量
data.size integer 每页大小
data.current integer 当前页码

请求示例:

// JavaScript (fetch)
const response = await fetch('/api/bd/list', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    current: 1,
    size: 10,
    name_zh: "订单"
  })
});
const data = await response.json();
// JavaScript (axios)
const { data } = await axios.post('/api/bd/list', {
  current: 1,
  size: 10,
  name_zh: "订单"
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "records": [
      {
        "id": 12345,
        "name_zh": "订单管理",
        "name_en": "order_management",
        "type": "table",
        "category": "业务",
        "describe": "订单管理业务领域",
        "create_time": "2024-01-15 10:30:00"
      }
    ],
    "total": 100,
    "size": 10,
    "current": 1
  }
}

错误响应:

{
  "code": 500,
  "message": "获取业务领域列表失败",
  "data": null,
  "error": "Database connection failed"
}

2. 获取业务领域详情

根据ID获取单个业务领域的详细信息。

请求URL: POST /api/bd/detail

请求参数:

参数名 类型 必填 说明
id integer 业务领域节点ID

返回参数:

参数名 类型 说明
code integer 状态码
message string 消息
data object 业务领域详情对象

请求示例:

// JavaScript (fetch)
const response = await fetch('/api/bd/detail', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    id: 12345
  })
});
const data = await response.json();
// JavaScript (axios)
const { data } = await axios.post('/api/bd/detail', {
  id: 12345
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 12345,
    "name_zh": "订单管理",
    "name_en": "order_management",
    "type": "table",
    "category": "业务",
    "describe": "订单管理业务领域",
    "tag": 100,
    "data_source": 200,
    "create_time": "2024-01-15 10:30:00",
    "update_time": "2024-01-16 14:20:00"
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体
500 业务领域ID不能为空 id参数缺失
500 业务领域ID必须为整数 id格式错误
500 业务领域不存在 找不到对应记录

3. 删除业务领域

根据ID删除业务领域。

请求URL: POST /api/bd/delete

请求参数:

参数名 类型 必填 说明
id integer 业务领域节点ID

返回参数:

参数名 类型 说明
code integer 状态码
message string 消息
data.message string 删除结果描述

请求示例:

// JavaScript (axios)
const { data } = await axios.post('/api/bd/delete', {
  id: 12345
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "message": "业务领域删除成功"
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体
500 业务领域ID不能为空 id参数缺失
500 业务领域删除失败 删除操作失败

4. 保存业务领域

保存业务领域,支持新建和更新两种模式。

请求URL: POST /api/bd/save

请求参数:

参数名 类型 必填 说明
id integer 业务领域ID(有则更新,无则新建)
name_zh string 新建时必填 中文名称
name_en string 新建时必填 英文名称
describe string 描述
type string 类型
category string 分类
tag integer 标签ID
data_source integer 数据源ID

返回参数:

参数名 类型 说明
code integer 状态码
message string 消息
data object 保存后的业务领域数据

请求示例:

// 新建
const { data } = await axios.post('/api/bd/save', {
  name_zh: "客户管理",
  name_en: "customer_management",
  type: "table",
  category: "业务",
  describe: "客户信息管理业务领域"
});

// 更新
const { data } = await axios.post('/api/bd/save', {
  id: 12345,
  describe: "更新后的描述"
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 12346,
    "name_zh": "客户管理",
    "name_en": "customer_management",
    "type": "table",
    "category": "业务",
    "describe": "客户信息管理业务领域",
    "create_time": "2024-01-17 09:00:00"
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体
500 新建时 name_zh 和 name_en 为必填项 新建时缺少必填字段

5. 更新业务领域

更新已存在的业务领域。

请求URL: POST /api/bd/update

请求参数:

参数名 类型 必填 说明
id integer 业务领域节点ID
name_zh string 中文名称
name_en string 英文名称
describe string 描述
tag integer 标签ID
data_source integer 数据源ID

请求示例:

const { data } = await axios.post('/api/bd/update', {
  id: 12345,
  name_zh: "订单管理系统",
  describe: "更新后的描述信息"
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 12345,
    "name_zh": "订单管理系统",
    "name_en": "order_management",
    "describe": "更新后的描述信息",
    "update_time": "2024-01-17 10:30:00"
  }
}

错误码:

code message 说明
500 参数不完整 未提供id参数

6. 上传文件

上传业务领域相关文件到对象存储。

请求URL: POST /api/bd/upload

Content-Type: multipart/form-data

请求参数:

参数名 类型 必填 说明
file File 上传的文件

返回参数:

参数名 类型 说明
data.filename string 原始文件名
data.size integer 文件大小(字节)
data.type string 文件类型(扩展名)
data.url string 文件存储路径

请求示例:

// JavaScript (FormData)
const formData = new FormData();
formData.append('file', fileInput.files[0]);

const response = await fetch('/api/bd/upload', {
  method: 'POST',
  body: formData
});
const data = await response.json();
// JavaScript (axios)
const formData = new FormData();
formData.append('file', file);

const { data } = await axios.post('/api/bd/upload', formData, {
  headers: {
    'Content-Type': 'multipart/form-data'
  }
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "filename": "schema.sql",
    "size": 2048,
    "type": "sql",
    "url": "business_domain/schema_20240117103000.sql"
  }
}

错误码:

code message 说明
500 没有找到上传的文件 请求中无file字段
500 未选择文件 文件名为空
500 不支持的文件类型 文件扩展名不在允许列表中

7. 下载文件

下载业务领域相关文件。

请求URL: GET /api/bd/download

请求参数(Query String):

参数名 类型 必填 说明
url string 文件存储路径(从上传接口返回)

返回:

成功时返回文件流(作为附件下载),失败时返回 JSON 错误信息。

请求示例:

// 方式1:直接打开链接下载
window.open('/api/bd/download?url=business_domain/schema_20240117103000.sql');

// 方式2:使用fetch下载
const response = await fetch('/api/bd/download?url=' + encodeURIComponent(fileUrl));
if (response.ok) {
  const blob = await response.blob();
  const url = window.URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'filename.sql';
  a.click();
}

错误码:

code message 说明
500 文件路径不能为空 未提供url参数
500 文件获取失败 MinIO获取文件失败

8. 获取关系图谱

获取业务领域的完整关系图谱数据,用于可视化展示。

请求URL: POST /api/bd/graphall

请求参数:

参数名 类型 必填 默认值 说明
id integer - 业务领域节点ID
meta boolean true 是否包含元数据节点

返回参数:

参数名 类型 说明
data.nodes array 节点列表
data.lines array 关系列表

请求示例:

const { data } = await axios.post('/api/bd/graphall', {
  id: 12345,
  meta: true
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "nodes": [
      {
        "id": 12345,
        "name": "订单管理",
        "type": "BusinessDomain",
        "properties": { ... }
      },
      {
        "id": 12346,
        "name": "order_id",
        "type": "MetaData",
        "properties": { ... }
      }
    ],
    "lines": [
      {
        "from": 12345,
        "to": 12346,
        "type": "HAS_METADATA",
        "properties": { ... }
      }
    ]
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体
500 业务领域ID不能为空 id参数缺失
500 业务领域ID必须为整数 id格式错误

9. 解析DDL语句

解析 SQL DDL 语句,提取表结构信息,用于快速创建业务领域。

请求URL: POST /api/bd/ddlparse

请求方式:

支持两种方式提交 DDL:

  1. 文件上传方式 (multipart/form-data)
  2. JSON方式 (application/json)

请求参数(文件上传方式):

参数名 类型 必填 说明
file File SQL文件(.sql扩展名)

请求参数(JSON方式):

参数名 类型 必填 说明
sql string SQL DDL 内容

返回参数:

参数名 类型 说明
data array 解析后的DDL列表,包含表信息和字段信息
data[].table_info object 表信息
data[].columns array 字段列表
data[].exist boolean 表是否已存在于系统中

请求示例:

// 方式1:文件上传
const formData = new FormData();
formData.append('file', sqlFile);

const { data } = await axios.post('/api/bd/ddlparse', formData, {
  headers: {
    'Content-Type': 'multipart/form-data'
  }
});

// 方式2:JSON提交
const { data } = await axios.post('/api/bd/ddlparse', {
  sql: `
    CREATE TABLE orders (
      id INT PRIMARY KEY,
      customer_id INT,
      amount DECIMAL(10,2),
      create_time DATETIME
    );
  `
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "table_info": {
        "name_en": "orders",
        "name_zh": "订单表",
        "comment": "订单信息表"
      },
      "columns": [
        {
          "name_en": "id",
          "name_zh": "主键",
          "data_type": "INT",
          "is_primary": true,
          "comment": "主键ID"
        },
        {
          "name_en": "customer_id",
          "name_zh": "客户ID",
          "data_type": "INT",
          "is_primary": false,
          "comment": "关联客户ID"
        }
      ],
      "exist": false
    }
  ]
}

错误码:

code message 说明
500 只接受SQL文件 上传的文件不是.sql格式
500 SQL内容不能为空 未提供SQL内容
500 未找到有效的CREATE TABLE语句 DDL解析失败

10. 搜索关联元数据

搜索与业务领域关联的元数据列表。

请求URL: POST /api/bd/search

请求参数:

参数名 类型 必填 默认值 说明
id integer - 业务领域节点ID
current integer 1 当前页码
size integer 10 每页大小
name_en string - 英文名称过滤条件
name_zh string - 中文名称过滤条件
category string - 分类过滤条件
tag string - 标签过滤条件

返回参数:

参数名 类型 说明
data.records array 元数据列表
data.total integer 总数量
data.size integer 每页大小
data.current integer 当前页码

请求示例:

const { data } = await axios.post('/api/bd/search', {
  id: 12345,
  current: 1,
  size: 20,
  name_zh: "订单"
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "records": [
      {
        "id": 23456,
        "name_zh": "订单ID",
        "name_en": "order_id",
        "data_type": "INT",
        "category": "主键",
        "create_time": "2024-01-15 10:30:00"
      }
    ],
    "total": 50,
    "size": 20,
    "current": 1
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体
500 业务领域ID不能为空 id参数缺失
500 业务领域ID必须为整数 id格式错误

11. 组合创建业务领域

从已有的业务领域和元数据中组合创建新的业务领域。

请求URL: POST /api/bd/compose

请求参数:

参数名 类型 必填 说明
name_zh string 中文名称
name_en string 英文名称(不提供则自动翻译)
id_list array 关联的业务领域和元数据列表
describe string 描述
type string 类型
category string 分类
tag integer 标签ID
data_source integer 数据源ID

id_list 格式:

[
  {
    "domain_id": 123,
    "metaData": [
      { "id": 456 },
      { "id": 789 }
    ]
  }
]

请求示例:

const { data } = await axios.post('/api/bd/compose', {
  name_zh: "销售分析域",
  name_en: "sales_analysis",
  describe: "整合订单和客户数据的销售分析业务领域",
  id_list: [
    {
      domain_id: 12345,
      metaData: [
        { id: 23456 },
        { id: 23457 }
      ]
    },
    {
      domain_id: 12346,
      metaData: [
        { id: 23458 }
      ]
    }
  ]
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "business_domain": {
      "id": 12350,
      "name_zh": "销售分析域",
      "name_en": "sales_analysis",
      "describe": "整合订单和客户数据的销售分析业务领域",
      "create_time": "2024-01-17 11:00:00"
    }
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体
500 name_zh 为必填项 缺少中文名称
500 id_list 为必填项 缺少关联列表

12. 获取标签列表

获取可用于业务领域关联的数据标签列表。

请求URL: POST /api/bd/labellist

请求参数:

参数名 类型 必填 默认值 说明
current integer 1 当前页码
size integer 10 每页大小
name_en string - 英文名称过滤条件
name_zh string - 中文名称过滤条件
category string - 分类过滤条件
group string - 分组过滤条件

返回参数:

参数名 类型 说明
data.records array 标签列表
data.total integer 总数量
data.size integer 每页大小
data.current integer 当前页码

请求示例:

const { data } = await axios.post('/api/bd/labellist', {
  current: 1,
  size: 20,
  category: "业务标签"
});

返回示例:

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "records": [
      {
        "id": 100,
        "name_zh": "核心业务",
        "name_en": "core_business",
        "category": "业务标签",
        "group": "优先级",
        "create_time": "2024-01-10 09:00:00"
      }
    ],
    "total": 30,
    "size": 20,
    "current": 1
  }
}

错误码:

code message 说明
500 请求数据不能为空 未提供请求体

错误码说明

通用错误码

code 说明
200 请求成功
500 服务器内部错误

常见错误消息

message 说明 解决方案
请求数据不能为空 未提供请求体或请求体为空 确保发送有效的JSON请求体
业务领域ID不能为空 必填参数id缺失 添加id参数
业务领域ID必须为整数 id参数类型错误 确保id为整数类型
业务领域不存在 指定ID的记录不存在 检查ID是否正确
参数不完整 缺少必填参数 检查请求参数完整性
新建时 name_zh 和 name_en 为必填项 新建时缺少必填字段 添加name_zh和name_en参数
不支持的文件类型 上传文件类型不在允许列表中 检查文件扩展名

更新日志

版本 日期 更新内容
1.0.0 2025-12-06 初始版本