[ PROMPT_NODE_27888 ]
fastapi-endpoint
[ SKILL_DOCUMENTATION ]
# FastAPI 端点构建器
## 何时使用
当你需要执行以下操作时使用此工具:
- 向现有的 FastAPI 项目添加新的 API 端点
- 构建具有适当验证和错误处理的 CRUD 操作
- 设置带有依赖注入的认证端点
- 使用 SQLAlchemy 2.0 创建异步数据库查询
- 为 API 路由生成完整的测试覆盖率
## 第一阶段:探索(规划模式)
进入规划模式。在编写任何代码之前,先探索现有项目以了解:
### 项目结构
- 找到 FastAPI 应用入口点(`main.py`, `app.py` 或 `app/__init__.py`)
- 识别路由组织模式(单文件 vs `routers/` 目录)
- 检查是否存在 `models/`, `schemas/`, `crud/` 或 `services/` 目录
- 查看 `pyproject.toml` 或 `requirements.txt` 以了解已安装的依赖
### 现有模式
- 现有端点是如何组织的?(基于函数 vs 基于类)
- 使用了什么 ORM?(SQLAlchemy 2.0 异步、Tortoise、原生 SQL 或无)
- 数据库会话是如何管理的?(`Depends(get_db)`, 中间件或其他)
- 存在什么认证模式?(OAuth2PasswordBearer, API key header, 自定义)
- 是否有现有的 Pydantic 基础模型或共享模式?
- 标准响应格式是什么?(直接模型,包装后的 `{"data": ..., "meta": ...}`)
### 测试模式
- 测试存放在哪里?(`tests/`, `test_*.py`, `*_test.py`)
- 使用了什么测试客户端?(httpx AsyncClient, TestClient, pytest-asyncio)
- 是否有用于数据库和认证的测试夹具(fixtures)?
## 第二阶段:面试(AskUserQuestion)
使用 AskUserQuestion 来澄清需求。分轮提问 — 不要一次性抛出所有问题。
### 第一轮:核心端点
问题: "此端点管理什么资源?"
标题: "资源"
选项:
- "新资源(我将描述字段)" — 从零开始创建新数据模型
- "现有模型(扩展它)" — 为代码库中已存在的模型添加端点
- "关系端点(嵌套)" — 例如 /users/{id}/orders — 关联资源上的端点
问题: "你需要哪些 HTTP 方法?"
标题: "方法"
多选: true
选项:
- "完整 CRUD(GET 列表, GET 详情, POST, PUT/PATCH, DELETE)" — 所有标准操作
- "只读(GET 列表 + GET 详情)" — 无变更操作
- "自定义动作(POST /resource/{id}/action)" — 业务逻辑端点,非标准 CRUD
### 第二轮:数据模型(如果是新资源)
问题: "该资源有哪些字段?(简要描述)"
标题: "字段"
选项: