上次我们写了 Superpowers 小白上手指南,很多读者问:能不能来一个真正的实战?用一个完整项目,展示 Superpowers 的全部威力?今天,它来了。我们从零开发一个「待办事项 API 服务」,完整走一遍 Superpowers 的开发流程。
一、前言:从"会用"到"用好"
上篇文章我们介绍了 Superpowers 是什么、怎么装、 Skills 怎么用。但说实话,那些都是"纸上谈兵"------看懂了不代表会用,会用不代表用好。
今天这篇实战文章,我们来做一件不一样的事:用一个真实的项目,完整走一遍 Superpowers 的开发流程。
项目选择:待办事项 API 服务(Todo API) 。
为什么选它?
- 需求明确:增删改查,不需要纠结业务逻辑
- 技术全面:涉及数据库、API 设计、测试、文档
- 可扩展:完成后可以加用户系统、加标签、加团队协作
目标:从 0 开始,用 Superpowers 开发出一个可以直接跑起来的完整项目。
二、项目目标:Todo API 服务
我们要开发的 API 提供以下功能:
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /api/todos | 获取所有任务 |
| POST | /api/todos | 创建新任务 |
| PUT | /api/todos/:id | 更新任务(修改内容或标记完成) |
| DELETE | /api/todos/:id | 删除任务 |
| GET | /api/stats | 获取统计(已完成/未完成数量) |
技术栈:
- Node.js + Express.js
- SQLite(文件型数据库,无需安装)
- Jest(测试框架)
- 无需额外依赖,云函数可直接部署
三、实战开发:Superpowers 六步走
现在,启动 Claude Code,激活 Superpowers,开始!
第一步:brainstorming ------ 需求分析
提示词:
/superpowers.brainstorming 我要开发一个待办事项 API 服务(Node.js + Express + SQLite),请帮我分析需求,输出:1. RESTful API 端点设计 2. 数据库表结构 3. 需要处理的边缘情况 4. 推荐的开发顺序
Superpowers 的输出(部分):
API 端点设计:
bash
GET /api/todos → 获取所有任务(支持 ?completed=true 筛选)
POST /api/todos → 创建任务(body: { title })
PUT /api/todos/:id → 更新任务(body: { title, completed })
DELETE /api/todos/:id → 删除任务
GET /api/stats → 统计信息
数据库表结构:
sql
CREATE TABLE todos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
completed BOOLEAN DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
边缘情况清单:
- 创建任务时 title 为空 → 返回 400 错误
- 更新/删除不存在的任务 → 返回 404 错误
- 数据库连接失败 → 返回 500 错误并记录日志
- 并发更新同一任务 → 使用事务保证数据一致性
💡 小贴士:brainstorming 阶段不要急着写代码,先把"要做什么"想清楚。这一步花 5 分钟,能省下后面 1 小时返工时间。
第二步:writing-plans ------ 制定计划
提示词:
/superpowers.writing-plans 根据上面的需求分析,制定详细的开发计划,包括:每个步骤的具体任务、预期产出、验收标准。按顺序列出步骤。
Superpowers 的输出:
bash
📋 开发计划:Todo API 服务
步骤 1:项目初始化
- 任务:创建项目目录,初始化 package.json
- 产出:可运行的基础项目结构
- 验收:npm start 不报错
步骤 2:数据库设置
- 任务:创建 SQLite 数据库连接,初始化 todos 表
- 产出:db.js 数据库封装文件
- 验收:数据库文件自动创建,表结构正确
步骤 3:API 端点实现
- 任务:实现 5 个 RESTful 端点
- 产出:完整的 app.js 主应用文件
- 验收:每个端点返回正确的 HTTP 状态码和 JSON
步骤 4:错误处理
- 任务:为每个端点添加错误处理和边界检查
- 产出:健壮的错误响应
- 验收:无效输入返回 400/404,服务器错误返回 500
步骤 5:单元测试
- 任务:使用 Jest + Supertest 编写测试用例
- 产出:tests/app.test.js
- 验收:所有测试通过,覆盖主要功能
步骤 6:文档编写
- 任务:编写 README.md 和 API 文档
- 产出:清晰的部署和使用说明
- 验收:他人能按照文档启动项目
💡 小贴士:writing-plans 的输出可以直接当任务清单用。每完成一步,在 Superpowers 中确认,再进入下一步。
第三步:executing-plans ------ 执行计划
提示词:
/superpowers.executing-plans 开始执行计划,从步骤 1 项目初始化开始。每完成一个步骤,向我确认后再继续下一步。
Superpowers 的执行过程(示例):
📝 步骤 1:项目初始化
go
✅ 项目目录已创建:todo-api/
✅ package.json 已初始化
✅ 依赖已安装:express, sqlite3, jest, supertest
📁 当前项目结构:
todo-api/
├── package.json
├── src/
│ └── app.js (待实现)
├── tests/
│ └── app.test.js (待实现)
└── README.md (待实现)
📝 步骤 3:API 端点实现(核心)
Superpowers 自动生成完整的 app.js:
scss
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
// 连接数据库
const db = new sqlite3.Database('./todos.db');
// 初始化表
db.run(`CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
completed BOOLEAN DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// GET /api/todos - 获取所有任务
app.get('/api/todos', (req, res) => {
const { completed } = req.query;
let sql = 'SELECT * FROM todos ORDER BY created_at DESC';
const params = [];
if (completed !== undefined) {
sql = 'SELECT * FROM todos WHERE completed = ? ORDER BY created_at DESC';
params.push(completed === 'true' ? 1 : 0);
}
db.all(sql, params, (err, rows) => {
if (err) return res.status(500).json({ error: err.message });
res.json({ data: rows });
});
});
// POST /api/todos - 创建新任务
app.post('/api/todos', (req, res) => {
const { title } = req.body;
if (!title || !title.trim()) {
return res.status(400).json({ error: 'title 不能为空' });
}
db.run('INSERT INTO todos (title) VALUES (?)', [title.trim()], function(err) {
if (err) return res.status(500).json({ error: err.message });
res.status(201).json({
id: this.lastID,
title: title.trim(),
completed: false
});
});
});
// PUT /api/todos/:id - 更新任务
app.put('/api/todos/:id', (req, res) => {
const { id } = req.params;
const { title, completed } = req.body;
// 动态构建更新语句
const updates = [];
const params = [];
if (title !== undefined) { updates.push('title = ?'); params.push(title); }
if (completed !== undefined) { updates.push('completed = ?'); params.push(completed ? 1 : 0); }
if (updates.length === 0) {
return res.status(400).json({ error: '没有要更新的字段' });
}
updates.push('updated_at = CURRENT_TIMESTAMP');
params.push(id);
db.run(
`UPDATE todos SET ${updates.join(', ')} WHERE id = ?`,
params,
function(err) {
if (err) return res.status(500).json({ error: err.message });
if (this.changes === 0) return res.status(404).json({ error: '任务不存在' });
res.json({ message: '更新成功' });
}
);
});
// DELETE /api/todos/:id - 删除任务
app.delete('/api/todos/:id', (req, res) => {
const { id } = req.params;
db.run('DELETE FROM todos WHERE id = ?', [id], function(err) {
if (err) return res.status(500).json({ error: err.message });
if (this.changes === 0) return res.status(404).json({ error: '任务不存在' });
res.json({ message: '删除成功' });
});
});
// GET /api/stats - 统计信息
app.get('/api/stats', (req, res) => {
db.get(`
SELECT
COUNT(*) as total,
SUM(CASE WHEN completed = 1 THEN 1 ELSE 0 END) as completed,
SUM(CASE WHEN completed = 0 THEN 1 ELSE 0 END) as pending
FROM todos
`, [], (err, row) => {
if (err) return res.status(500).json({ error: err.message });
res.json(row);
});
});
app.listen(PORT, () => {
console.log(`🚀 Todo API 服务已启动,端口: ${PORT}`);
});
✅ 步骤 3 完成:5 个 API 端点已实现
💡 小贴士:executing-plans 会自动处理代码生成、文件创建、依赖安装。每步完成后确认,遇到问题 Superpowers 会自动调试。
第四步:using-tdd ------ 测试驱动开发
提示词:
/superpowers.using-tdd 为当前的 API 编写完整的单元测试,要求:使用 Jest + Supertest,测试正常情况和边界情况,覆盖率 100%
Superpowers 生成的测试文件(部分):
scss
const request = require('supertest');
const app = require('../src/app');
const db = require('../src/db');
beforeAll(() => {
// 测试前清空数据库
db.run('DELETE FROM todos');
});
describe('GET /api/todos', () => {
it('应该返回空数组(初始状态)', async () => {
const res = await request(app).get('/api/todos');
expect(res.status).toBe(200);
expect(res.body.data).toEqual([]);
});
it('应该返回已创建的任务', async () => {
await request(app).post('/api/todos').send({ title: '测试任务' });
const res = await request(app).get('/api/todos');
expect(res.body.data.length).toBeGreaterThan(0);
});
it('支持按完成状态筛选', async () => {
await request(app).post('/api/todos').send({ title: '已完成任务' });
const res = await request(app).get('/api/todos?completed=true');
expect(res.status).toBe(200);
});
});
describe('POST /api/todos', () => {
it('创建任务成功', async () => {
const res = await request(app)
.post('/api/todos')
.send({ title: '新任务' });
expect(res.status).toBe(201);
expect(res.body.title).toBe('新任务');
expect(res.body.completed).toBe(false);
});
it('title 为空时返回 400', async () => {
const res = await request(app)
.post('/api/todos')
.send({ title: '' });
expect(res.status).toBe(400);
expect(res.body.error).toBe('title 不能为空');
});
});
describe('PUT /api/todos/:id', () => {
it('更新任务成功', async () => {
const create = await request(app)
.post('/api/todos')
.send({ title: '待更新任务' });
const id = create.body.id;
const res = await request(app)
.put(`/api/todos/${id}`)
.send({ completed: true });
expect(res.status).toBe(200);
});
it('更新不存在的任务返回 404', async () => {
const res = await request(app)
.put('/api/todos/99999')
.send({ completed: true });
expect(res.status).toBe(404);
});
});
describe('DELETE /api/todos/:id', () => {
it('删除任务成功', async () => {
const create = await request(app)
.post('/api/todos')
.send({ title: '待删除任务' });
const id = create.body.id;
const res = await request(app).delete(`/api/todos/${id}`);
expect(res.status).toBe(200);
});
});
describe('GET /api/stats', () => {
it('返回正确的统计数据', async () => {
const res = await request(app).get('/api/stats');
expect(res.body).toHaveProperty('total');
expect(res.body).toHaveProperty('completed');
expect(res.body).toHaveProperty('pending');
});
});
运行测试:
bash
$ npm test
PASS tests/app.test.js
GET /api/todos
✓ 应该返回空数组(初始状态)
✓ 应该返回已创建的任务
✓ 支持按完成状态筛选
POST /api/todos
✓ 创建任务成功
✓ title 为空时返回 400
PUT /api/todos/:id
✓ 更新任务成功
✓ 更新不存在的任务返回 404
DELETE /api/todos/:id
✓ 删除任务成功
GET /api/stats
✓ 返回正确的统计数据
Tests: 10 passed, 10 total
💡 小贴士 :TDD 不是说先写测试再写代码。using-tdd 的精髓是让测试和代码一起跑,发现问题立即修复,保证每一步都高质量。
第五步:dispatching-parallel-agents ------ 并行开发
假设我们要给 Todo API 添加两个新功能:用户认证 和任务标签。
提示词:
/superpowers.dispatching-parallel-agents 同时开发两个功能:1. 添加 JWT 用户认证(注册/登录/鉴权)2. 为任务添加标签功能(支持一个任务打多个标签)
Superpowers 的并行开发:
markdown
🚀 启动两个并行 Agent...
Agent 1 🔐:用户认证模块
- 创建 auth.js 认证中间件
- 添加 /api/auth/register 和 /api/auth/login 端点
- 生成 JWT token
- 实现 token 验证中间件
状态:✅ 完成
Agent 2 🏷️:任务标签模块
- 修改数据库表结构,添加 tags 表
- 添加 /api/todos/:id/tags 端点
- 实现标签的增删改查
状态:✅ 完成
🔄 代码合并中...
- 解决冲突 0 个
- 整合 auth 中间件到所有路由
- 运行完整测试套件
结果:✅ 全部通过
💡 小贴士:dispatching-parallel-agents 是 Superpowers 的杀手级功能。多个功能同时开发,时间省一半,代码质量还不打折。
第六步:finishing-a-development-branch ------ 收尾交付
提示词:
/superpowers.finishing-a-development-branch 项目开发完成,请帮我:1. 编写 README.md 文档 2. 添加 .gitignore 3. 初始化 Git 仓库并提交 4. 输出一份快速上手指南
Superpowers 输出的 README.md(节选):
bash
# Todo API 服务
一个基于 Node.js + Express + SQLite 的待办事项 API 服务。
## 快速开始
```bash
# 克隆项目
git clone <your-repo>
cd todo-api
# 安装依赖
npm install
# 启动服务
npm start
# 运行测试
npm test
API 文档
创建任务
POST /api/todos Body: { "title": "学习 Superpowers" }
获取所有任务
GET /api/todos
更新任务
PUT /api/todos/:id Body: { "completed": true }
删除任务
DELETE /api/todos/:id
获取统计
GET /api/stats
yaml
---
## 四、完整项目结构
最终的项目结构:
todo-api/ ├── src/ │ ├── app.js # 主应用(Express 服务器) │ └── db.js # 数据库连接封装 ├── tests/ │ └── app.test.js # Jest 单元测试 ├── package.json ├── .gitignore ├── README.md └── todos.db # SQLite 数据库(自动生成)
yaml
---
## 五、运行项目
```bash
# 安装依赖
npm install
# 启动服务
npm start
# 输出:🚀 Todo API 服务已启动,端口: 3000
# 测试 API
curl http://localhost:3000/api/todos
# 输出:{"data": []}
# 创建任务
curl -X POST http://localhost:3000/api/todos \
-H "Content-Type: application/json" \
-d '{"title": "用 Superpowers 开发第一个项目"}'
# 输出:{"id":1,"title":"用 Superpowers 开发第一个项目","completed":false}
六、效果对比:有没有 Superpowers 差多少?
| 开发环节 | 不用 Superpowers | 用 Superpowers |
|---|---|---|
| 需求分析 | 自己想,可能遗漏 | 自动分析,输出清单 |
| 制定计划 | 凭经验,可能漏步骤 | 详细计划,含验收标准 |
| 写代码 | 一个个文件手动写 | 自动生成,代码规范 |
| 错误处理 | 测出来才知道 | 边写边测,自动修复 |
| 单元测试 | 最后补,经常忘 | TDD 同步,质量有保障 |
| 并行开发 | 串行做,时间翻倍 | 多 Agent 并行,效率翻倍 |
| 文档 | 懒得写 | 自动生成,完整详细 |
七、总结
今天我们从零开发了一个完整的 Todo API 服务,用到了 Superpowers 的 6 个核心 Skills:
- brainstorming ------ 需求分析,理清做什么
- writing-plans ------ 制定计划,知道怎么做
- executing-plans ------ 自动执行,边做边调
- using-tdd ------ 测试驱动,质量有保障
- dispatching-parallel-agents ------ 并行开发,效率翻倍
- finishing-a-development-branch ------ 收尾交付,文档齐全
整个过程,你只需要:
- 提需求(写提示词)
- 确认结果(每步确认)
- 做决策(遇到选择时拍板)
剩下的,Superpowers 帮你搞定。
👨💻 H先生出品 | 专注 AI 工具与效率提升
系列文章:
- 上篇:【保姆级】Superpowers 插件:给 Claude Code 装上"工程大脑"
- 下篇预告:Superpowers 高级技巧------如何自定义你的专属 Skill