with one click
architect-data-api-design
数据模型和API设计方法论,包含ERD设计、数据字典、RESTful API规范
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
数据模型和API设计方法论,包含ERD设计、数据字典、RESTful API规范
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
BMAD 全自动研发流水线编排器。编排 9 个专业 Agent(PM、架构师、UI Designer、Tech Lead、Scrum Master、Frontend、Backend、QA、DevOps)从需求到部署。 Triggers: 'boss mode', '/boss', '全自动开发', '从需求到部署', '帮我做一个', 'build this', 'ship it', '全流程', '自动化开发', '一键开发', 'start a project', 'new feature' Does NOT trigger: - 单文件修改或简单 bug 修复(直接编辑即可) - 纯代码阅读或解释(使用 read 工具) - 已有 pipeline 正在运行时的重复启动 - 极小事(预计 <30 分钟人工可完成、不需要 PRD/架构/门禁记录) Output: 完整项目代码 + PRD/架构/UI/测试/部署文档,写入 .boss/<feature>/ 目录
后端测试编写指南,包括单元测试、集成测试和E2E测试的编写方法和最佳实践
自动生成 CHANGELOG,基于 git 提交历史和 pipeline 产物信息,遵循 Conventional Commits 和 Keep a Changelog 规范
从CEO/战略视角进行商业价值评审,评估市场契合度、ROI、竞争优势、风险和战略对齐
设计变体模式,产出2-3个设计方案及 tradeoff 分析,供用户选择后确定最终方案
前端测试编写指南,包括单元测试、集成测试和E2E测试的编写方法和最佳实践
| name | architect/data-api-design |
| description | 数据模型和API设计方法论,包含ERD设计、数据字典、RESTful API规范 |
| version | 1.0.0 |
| agent | architect |
| type | methodology |
| user-invocable | false |
| agent-invocable | true |
| dependencies | [] |
| triggers | ["架构设计完成后","需要设计数据模型时","需要定义API接口时"] |
在系统架构确定后,需要设计:
从PRD中识别核心实体(名词):
示例:
确定实体之间的关系:
| 关系类型 | 说明 | 示例 |
|---|---|---|
| 一对一 (1:1) | 一个A对应一个B | User - Profile |
| 一对多 (1:N) | 一个A对应多个B | User - Post |
| 多对多 (M:N) | 多个A对应多个B | Post - Tag |
关系表示:
||--o{: 一对多||--||: 一对一}o--o{: 多对多使用 Mermaid 绘制 ERD:
erDiagram
User ||--o{ Post : creates
User ||--o{ Comment : writes
Post ||--o{ Comment : has
Post }o--o{ Tag : has
User {
uuid id PK
string email UK
string name
string passwordHash
enum role
datetime createdAt
datetime updatedAt
}
Post {
uuid id PK
uuid authorId FK
string title
text content
enum status
datetime publishedAt
datetime createdAt
datetime updatedAt
}
Comment {
uuid id PK
uuid postId FK
uuid userId FK
text content
datetime createdAt
}
Tag {
uuid id PK
string name UK
}
为每个表定义详细的字段信息:
| 字段 | 类型 | 约束 | 默认值 | 说明 |
|---|---|---|---|---|
| id | UUID | PK | uuid_generate_v4() | 主键 |
| VARCHAR(255) | UNIQUE, NOT NULL | - | 邮箱,用于登录 | |
| name | VARCHAR(100) | NOT NULL | - | 用户名 |
| passwordHash | VARCHAR(255) | NOT NULL | - | 密码哈希(bcrypt) |
| role | ENUM('user', 'admin') | NOT NULL | 'user' | 用户角色 |
| createdAt | TIMESTAMP | NOT NULL | NOW() | 创建时间 |
| updatedAt | TIMESTAMP | NOT NULL | NOW() | 更新时间 |
索引:
idx_user_email: email(唯一索引,用于登录查询)idx_user_role: role(用于角色筛选)| 字段 | 类型 | 约束 | 默认值 | 说明 |
|---|---|---|---|---|
| id | UUID | PK | uuid_generate_v4() | 主键 |
| authorId | UUID | FK, NOT NULL | - | 作者ID,外键关联User.id |
| title | VARCHAR(200) | NOT NULL | - | 文章标题 |
| content | TEXT | NOT NULL | - | 文章内容 |
| status | ENUM('draft', 'published', 'archived') | NOT NULL | 'draft' | 文章状态 |
| publishedAt | TIMESTAMP | NULL | - | 发布时间 |
| createdAt | TIMESTAMP | NOT NULL | NOW() | 创建时间 |
| updatedAt | TIMESTAMP | NOT NULL | NOW() | 更新时间 |
索引:
idx_post_author: authorId(用于查询用户的文章)idx_post_status: status(用于筛选状态)idx_post_published: publishedAt(用于按发布时间排序)| 数据类型 | 使用场景 | PostgreSQL | MySQL | MongoDB |
|---|---|---|---|---|
| 主键 | 唯一标识 | UUID, SERIAL | INT AUTO_INCREMENT, UUID | ObjectId |
| 字符串 | 短文本 | VARCHAR(n) | VARCHAR(n) | String |
| 长文本 | 文章内容 | TEXT | TEXT | String |
| 整数 | 数量、年龄 | INTEGER, BIGINT | INT, BIGINT | Number |
| 小数 | 价格、评分 | DECIMAL(p,s) | DECIMAL(p,s) | Number |
| 布尔 | 是否标志 | BOOLEAN | TINYINT(1) | Boolean |
| 日期时间 | 时间戳 | TIMESTAMP | DATETIME | Date |
| 枚举 | 固定选项 | ENUM | ENUM | String |
| JSON | 灵活数据 | JSONB | JSON | Object |
推荐:
| 规范 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| RESTful | 通用场景、CRUD操作 | 简单、标准、易理解 | 过度获取、多次请求 |
| GraphQL | 复杂查询、多端适配 | 按需获取、类型安全 | 学习曲线、缓存复杂 |
| gRPC | 微服务、高性能 | 性能高、类型安全 | 浏览器支持差 |
本项目推荐:RESTful(除非有特殊需求)
/users, /posts, /comments(不是 /getUsers, /createPost)/users(不是 /user)/users(不是 /Users)/order-items(不是 /orderItems 或 /order_items)| 方法 | 用途 | 示例 | 幂等性 |
|---|---|---|---|
| GET | 获取资源 | GET /users | 是 |
| POST | 创建资源 | POST /users | 否 |
| PUT | 完整更新 | PUT /users/123 | 是 |
| PATCH | 部分更新 | PATCH /users/123 | 否 |
| DELETE | 删除资源 | DELETE /users/123 | 是 |
| 操作 | 方法 | URL | 说明 |
|---|---|---|---|
| 获取列表 | GET | /api/v1/users | 支持分页、筛选、排序 |
| 获取详情 | GET | /api/v1/users/:id | 返回单个资源 |
| 创建 | POST | /api/v1/users | 请求体包含资源数据 |
| 完整更新 | PUT | /api/v1/users/:id | 替换整个资源 |
| 部分更新 | PATCH | /api/v1/users/:id | 只更新指定字段 |
| 删除 | DELETE | /api/v1/users/:id | 删除资源 |
嵌套资源:
GET /api/v1/users/:userId/posts - 获取用户的文章POST /api/v1/posts/:postId/comments - 为文章创建评论查询参数:
?page=1&limit=20?status=published&author=123?sort=-createdAt(-表示降序)?q=keyword单个资源:
{
"success": true,
"data": {
"id": "123",
"name": "John Doe",
"email": "john@example.com"
}
}
资源列表:
{
"success": true,
"data": [
{ "id": "1", "name": "Item 1" },
{ "id": "2", "name": "Item 2" }
],
"meta": {
"page": 1,
"limit": 20,
"total": 100,
"totalPages": 5
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "邮箱格式不正确",
"details": [
{
"field": "email",
"message": "必须是有效的邮箱地址"
}
]
}
}
错误码:
VALIDATION_ERROR: 验证错误(400)UNAUTHORIZED: 未认证(401)FORBIDDEN: 无权限(403)NOT_FOUND: 资源不存在(404)CONFLICT: 资源冲突(409,如邮箱已存在)INTERNAL_ERROR: 服务器错误(500)JWT (推荐):
Authorization: Bearer <token>
请求头:
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}
响应:
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "123",
"name": "John Doe",
"email": "john@example.com"
}
}
}
RBAC (基于角色):
enum Role {
USER = 'user',
ADMIN = 'admin'
}
// 中间件检查
if (user.role !== Role.ADMIN) {
throw new ForbiddenError();
}
| 模块 | 方法 | 路径 | 描述 | 认证 | 权限 |
|---|---|---|---|---|---|
| 认证 | |||||
| POST | /api/v1/auth/register | 用户注册 | 否 | - | |
| POST | /api/v1/auth/login | 用户登录 | 否 | - | |
| POST | /api/v1/auth/logout | 用户登出 | 是 | - | |
| GET | /api/v1/auth/me | 获取当前用户 | 是 | - | |
| 用户 | |||||
| GET | /api/v1/users | 获取用户列表 | 是 | admin | |
| GET | /api/v1/users/:id | 获取用户详情 | 是 | - | |
| PATCH | /api/v1/users/:id | 更新用户信息 | 是 | self/admin | |
| DELETE | /api/v1/users/:id | 删除用户 | 是 | admin | |
| 文章 | |||||
| GET | /api/v1/posts | 获取文章列表 | 否 | - | |
| GET | /api/v1/posts/:id | 获取文章详情 | 否 | - | |
| POST | /api/v1/posts | 创建文章 | 是 | - | |
| PATCH | /api/v1/posts/:id | 更新文章 | 是 | author/admin | |
| DELETE | /api/v1/posts/:id | 删除文章 | 是 | author/admin |
完成数据模型和API设计后,应输出以下内容(通常作为架构文档的第4-5章):
## 4. 数据模型
### 4.1 实体关系图 (ERD)
[Mermaid ERD]
### 4.2 数据字典
#### User 表
[字段表格]
#### Post 表
[字段表格]
---
## 5. API 设计
### 5.1 API 规范
- **风格**:RESTful
- **版本**:URL 前缀 `/api/v1`
- **认证**:Bearer Token (JWT)
- **格式**:JSON
### 5.2 接口列表
[接口表格]
### 5.3 响应格式
[成功响应示例]
[错误响应示例]
❌ 使用动词:/getUsers, /createPost(应该用HTTP方法表示动作)
❌ 过度嵌套:/users/:id/posts/:id/comments/:id(最多2层)
❌ 暴露实现:/api/getUserFromDatabase(暴露内部实现)
❌ 不一致:有的用复数有的用单数,有的驼峰有的下划线