Skip to content

102. 数据库 SQL 工具与后端自定义接口

学习目标

这一节继续完善 Vibe 系统的后端能力,重点是让 AI 能查询表结构、执行受控 SQL,并通过动态后端代码提供自定义接口。

学完后,你应该能理解:

  • 为什么模块配置要保存前端代码和后端接口代码;
  • show create table 能帮 AI 理解数据库表结构;
  • 执行 SQL 的工具为什么必须限制使用场景;
  • 后端自定义接口如何通过代码片段挂到模块上;
  • FastAPI 路由为什么不能简单“后注册覆盖前注册”;
  • 做 AI 代码生成系统时,安全边界比功能本身更重要。

模块配置里的代码字段

Vibe 系统的模块不是只存一个菜单名称。

模块记录里会维护几类核心内容:

  • 模块基础信息;
  • 模块配置;
  • 前端页面代码;
  • 后端接口代码;
  • 建表语句。

前端代码可以使用已经封装好的 AutoTable,后端代码则用于补充通用 CRUD 之外的业务接口。

对只写过 JS 的人来说,可以先把模块配置理解成一份“页面和接口的 schema”。不同的是,这份 schema 不只是描述字段,还会保存可执行的前后端代码片段。

查询建表语句

AI 要生成或修改模块,必须先知道当前表结构。

课程里实现了一个查询建表语句的接口,核心是执行类似下面的 SQL:

sql
show create table 表名

这个结果会返回表名和完整建表语句。

有了建表语句,AI 才能判断:

  • 当前表是否存在;
  • 已有哪些字段;
  • 字段类型是什么;
  • 是否需要新增字段;
  • 后端接口应该围绕哪张表工作。

这一步类似你写前端前先看接口文档。AI 写后端代码前,也需要先看数据库结构。

执行 SQL 工具

系统还准备了执行 SQL 的工具。

它可以接收一段 SQL,先做基础预处理,例如去掉注释和空行,再执行数据库操作。

执行后会根据 SQL 类型返回不同结果:

  • create tablealter tabledrop table 这类结构变更,返回执行成功和影响信息;
  • 查询或数据操作类 SQL,尝试返回查询结果;
  • 没有可返回结果的 SQL,也要能正常返回成功状态。

这个工具是 Vibe 系统能够让 AI 建表、改表的基础。

但它也是危险能力。

SQL 工具的安全边界

课程特别强调,执行 SQL 不能直接用于生产环境的普通业务。

原因很简单:

  • AI 可能生成错误 SQL;
  • 大表加字段可能锁表;
  • 错误删除或更新会破坏数据;
  • 生产数据库操作必须有人审核;
  • 真正企业环境里可能还要短信验证码、审批流、权限控制。

所以这个能力更适合开发环境、测试环境或内部提效工具。

如果以后面试时讲这个项目,不能只说“AI 可以执行 SQL”。更重要的是说明你知道它的风险,并且知道生产环境需要哪些安全措施。

后端自定义接口

通用模块默认有增删改查接口,但真实业务经常需要特殊接口。

例如:

  • 特殊删除接口;
  • 状态校验接口;
  • 批量处理接口;
  • 需要事务的业务接口;
  • 需要悲观锁的并发接口。

课程里通过后端代码字段,让模块可以定义额外接口。

这些接口不是写死在项目源码里,而是跟模块记录绑定。AI 可以根据用户需求生成这段后端代码,再由系统执行或保存。

装饰器形式的接口定义

后端接口代码使用接近 FastAPI 的装饰器写法。

可以把它理解成:

python
@router.post("/module/xxx/custom")
async def custom_api(...):
    ...

装饰器负责描述接口路径和请求方法,函数负责处理业务逻辑。

这种写法对 AI 友好,因为它和常见 FastAPI 项目非常接近。AI 读过技能文档后,更容易生成符合系统规则的代码。

FastAPI 路由覆盖限制

课程里还提到一个重要细节:

FastAPI 本身不是简单地让后注册的路由覆盖先注册的路由。

如果你注册两个相同路径、相同方法的接口,通常先注册的路由仍然会生效。

所以要实现“覆盖默认接口”,不能只追加一段新路由代码。

更合理的方式是:

  • 设计独立的自定义接口路径;
  • 或在通用接口执行前检查模块后端代码;
  • 如果后端代码声明了覆盖逻辑,就优先执行覆盖逻辑;
  • 如果没有覆盖逻辑,再走默认 CRUD。

这一点为后面覆盖默认接口做铺垫。

阶段重点

这一节不是在学某一个 SQL 语句。

重点是理解 AI 生成后端能力时需要三类基础设施:

  • 能看懂当前数据库结构;
  • 能在受控环境里执行数据库变更;
  • 能把模块级后端代码挂到真实接口流程里。

只有这些基础打好,AI 才不是只会生成文本,而是能真正参与系统开发。

AI Agent 课程学习文档。