跳到主要内容

数据模型

ApiGo 的持久化层使用 MySQL,初始化脚本 db/mysql/ddl.sql 创建 45 张核心表,升级脚本 db/mysql/update_ddl.sql 另补充 AI 场景与字典表。本文按业务域说明表之间的关系,帮助理解功能背后的数据边界。

无物理外键

整套模型不使用数据库外键,关联完整性由应用层保证。这样做的目的是:支持分库分表与数据迁移、避免级联删除误伤、便于按项目清理数据。阅读表结构时应关注唯一键与索引,它们才是真正的约束。

全局关系​

项目与权限域​

表作用关键字段 / 约束
base_project项目(租户空间)项目编码、名称、状态;所有业务数据带 project_id
base_project_member项目成员及角色项目 + 用户 + 角色;决定项目级数据可见性
base_sys_user平台用户user_name 唯一;密码、状态、部门
base_sys_role / base_sys_role_menu角色与菜单权限角色-菜单多对多
base_sys_menu菜单与按钮权限树形结构,前端动态路由来源
base_sys_dept部门wecom_dept_id 唯一,用于企业微信同步
base_sys_sso_bind第三方账号绑定(provider, provider_user_id) 唯一
base_sys_log管理端操作日志操作人、模块、动作、请求与结果
base_sys_message站内消息接收人、类型、已读状态
base_sys_params系统参数参数键值,运行期可调整

隔离规则:除平台级系统表外,接口、分组、数据源、规则、告警、AI 会话均以 project_id 隔离。用户只能看到自己所属项目的业务数据;超级管理员可跨项目操作。

接口资产域​

表作用关键字段 / 约束
base_api_info接口设计态主表api_path + api_method 唯一;api_type 为 sql/table/proxy;api_status 为 edit/audit/release/destroy;api_link_id 标识版本族;parent_id 支持派生接口
base_api_param接口参数定义入参/出参、类型、必填、默认值、排序;发布时快照到发布表
base_api_proxy代理模式配置目标地址、请求方法、超时、鉴权、报文模式、错误码映射
base_api_env环境定义(project_id, env_code) 唯一;路径前缀、访问地址、MCP 前缀、访问模式、是否生产
base_auth_env环境访问授权环境 + 用户,限定非公开环境的可见范围
base_api_release发布快照(api_link_id, env_code, deploy_revision) 唯一;source_api_id 指向设计态接口;is_current 标识当前生效版本
base_group接口分组树形分组,工作台左侧导航来源
base_category接口分类跨分组的横向标签
base_api_test_case自动化测试用例按 api_id + env_code 组织,保存请求快照、断言与最近执行结果
base_api_mock_ruleMock 规则按 api_id + env_code 配置,含优先级、延迟、状态码、响应体与匹配条件
base_api_log接口调用日志请求/响应、耗时、状态码、traceId、应用与发布版本;未启用 ES 时的主要日志存储

设计要点:

  • 设计态与发布态分离。base_api_info 可随时编辑,base_api_release 是不可变快照;回滚只切快照,不改设计态。
  • api_link_id 把同一接口的多个环境快照、测试用例串成一个版本族,修订号在族内递增。
  • base_api_env 的 access_mode 决定环境是公开访问还是权限访问;is_prod 用于生产环境标记与告警。

开放与授权域​

表作用关键字段 / 约束
base_app调用方应用app_code 唯一;app_key/app_secret;ips 凭证级 IP 白名单;scope 为 api/project;mcp_enabled
base_app_api应用-接口授权(project_id, api_id, app_id, grant_source) 唯一;grant_type 永久/有效期;关联审批单
base_audit调用审批单审批类型、状态 process/pass/reject/revoke、认证方式、有效期、日限额
base_subscription订阅状态 pending/active/expired/unsubscribed/frozen;生效起止、日限额、提醒级别
base_ip_ruleIP 访问控制规则环境、黑白名单类型、IP 列表;通过 base_rule_api 绑定接口
base_rule_api规则-接口绑定ruleType 区分 flow/degrade/cache/ip/warn;api_id + env_code
base_flow_rule流控规则环境、QPS 阈值、规则名
base_degrade_rule熔断规则慢调用比例 / 异常比例 / 异常数、时间窗口、最小请求数、熔断时长
base_cache_rule接口缓存规则过期时间、最大响应体、缓存 Key 规则
base_warn_rule告警规则告警类型、比较条件、阈值、时间窗口、最小请求数、通知方式与频率
base_warn_record告警记录触发值、发送状态、关联日志与 traceId

授权模型:应用获得接口调用权限有两条路径——手工授权(grant_source=manual)与审批通过(grant_source=audit)。订阅是另一层「按接口订阅 + 配额」的控制,独立于应用授权;运行时两者都会校验。

AI 域​

表作用关键字段 / 约束
base_ai_agent智能体配置agent_code 唯一;api_key_hash 只存 SHA-256 哈希,api_key_prefix 用于展示
base_ai_agent_tool智能体可用工具(agent_id, tool_code) 唯一;控制读写权限与启用状态
base_ai_conversation会话会话归属、场景、状态
base_ai_agent_turn对话轮次一轮问答的输入、SQL、结果、耗时、成功状态
base_ai_agent_message轮次内消息(conversation_id, turn_id, seq) 唯一;保存用户/助手/工具消息
base_ai_agent_session_state会话运行态待确认操作、上下文状态,支持多轮确认
base_ai_audit_logAI 调用审计动作、问题、Token、耗时、成功状态;异步写入
base_ai_agent_call_log工具调用日志工具名、入参、结果、耗时
base_ai_semantic_term语义层术语业务词 → 表/字段/口径
base_ai_semantic_metric语义层指标指标公式、维度、过滤条件

设计要点:智能体密钥只保存哈希,创建后无法再次查看明文;会话与轮次分离,便于按轮次统计成功率;session_state 支撑「生成 SQL → 用户确认 → 执行」的确认卡片流程。

日志与统计​

  • base_api_log 同时承担调用明细与报表数据源。启用 Elasticsearch 后,日志写入 ES,数据库保留配置与告警记录。
  • base_warn_record 保存告警触发快照,即使原日志被清理仍可追溯。
  • base_ai_audit_log 独立于接口日志,按 AI 动作维度统计。

唯一键与并发控制​

唯一键防什么问题
UK_API_PATH_METHOD同一路径 + 方法被两个接口占用
UK_RELEASE_REV同一版本族在同一环境生成重复修订号
uk_app_code应用编码重复导致 MCP/订阅寻址歧义
APP_API_SOURCE_UK同一应用对同一接口重复授权
UK_DATASOURCE_AUTH同一数据源重复授权给同一项目
UK_ENV_PROJECT_CODE项目内环境编码重复
UK_AGENT_CODE / UK_AGENT_TOOL智能体编码重复、同一工具重复绑定

发布链路还会对版本族根接口加行锁(lockVersionRoot),保证多实例并发发布时修订号不冲突。

数据生命周期​

数据清理策略
接口调用日志由部署方按表/索引自行归档;平台不自动删除
AI 审计日志无自动清理;长文本截断到 4000 字符
告警记录保留触发快照,用于事后追溯
发布快照删除接口或手动删除环境版本时清理
Session 状态随会话结束失效

生产环境建议对 base_api_log、base_ai_audit_log、base_ai_agent_message 设置分区或定期归档,避免单表无限增长。