评分明细
适用场景
affaanm-backend-patterns 快速入门
来自 affaan-m/ECC 仓库的后端架构模式 Skill,覆盖 API 设计、数据库优化、认证鉴权、微服务拆分等 10+ 真实生产环境的配置模板。
这是什么?解决什么问题?
affaanm-backend-patterns 是 ECC(Everything Claude Code)项目中的一个核心 Skill,它收集了来自真实生产项目的后端最佳实践。不是教科书式的”设计模式 23 种”,而是”Stripe 用了什么 API 版本策略”、“Notion 怎么处理大规模实时协作”、“Vercel 的 Serverless 冷启动怎么优化”这类具体到公司和技术栈的实战经验。
对开发者来说,这个 Skill 的价值在于:当你让 AI 设计一个后端方案时,它不再给出泛泛的”MVC + RESTful API”建议,而是引用具体公司的技术选型和架构决策——比如”参考 Stripe 的 API 版本通过 HTTP Header(Stripe-Version)传递而不是 URL path,因为 URL 版本会导致路由爆炸”。
准备工作
- 支持 Agent:Claude Code、Cursor、Codex、OpenCode、支持 Skills 协议的 Agent。
- 运行环境:取决于具体技术栈,ECC 仓库覆盖 Node.js (Express/Fastify/NestJS)、Python (FastAPI/Django)、Go (Gin/Echo)、Rust (Actix/Axum)。
- 目标场景:新项目架构设计、旧系统重构、API 设计评审、性能优化。
- 前置要求:了解基本的后端概念(HTTP、数据库、缓存、消息队列)。
3 步快速上手
第 1 步:安装 ECC
git clone https://github.com/affaan-m/everything-claude-code.git ~/.ecc
ln -s ~/.ecc/skills/backend-patterns ~/.claude/skills/backend-patterns
第 2 步:在 Claude Code 中调用
claude
发起任务:
我要设计一个 SaaS 产品的后端架构:用户认证(OAuth + JWT)、支付集成(Stripe)、实时通知(WebSocket)、文件上传(S3)。请参考 ECC backend-patterns 中的生产配置,给出架构设计和技术选型建议。
第 3 步:验证方案
Agent 会输出包含架构图描述、技术选型理由、具体代码示例的方案。和团队评审后,可以直接从 Agent 生成的代码开始实现。
常见踩坑
- 照搬大公司架构:Stripe 的 API 版本策略适合有 100+ 外部开发者的平台,3 人团队的内部 API 不需要这么复杂的版本管理。Skill 会根据项目规模给出适配建议。
- 过度设计:看到 Skill 中的 CQRS/Event Sourcing 模式就想用,但大部分 CRUD 应用不需要。Skill 会标注每个模式的适用场景和”不要用”的信号。
- 数据库索引迷信:不是所有查询都需要索引,加了索引反而拖慢写入速度。Skill 包含索引决策树帮助你判断。
- 缓存一致性问题:用 Redis 缓存数据库查询后,更新数据时忘了失效缓存,导致读到旧数据。Skill 有完整的 Cache-Aside/Write-Through/Write-Behind 模式对比。
- 事务边界不清晰:微服务架构下,跨服务的事务处理是最大痛点。Skill 包含 Saga 和 Outbox 模式的具体实现示例。
初级用法
- RESTful API 设计:让 Agent 按 Stripe/Twilio 风格的 API 设计规范生成接口。
- 数据库 Schema 设计:提供业务实体,Agent 输出规范化的数据库表结构。
- 错误处理最佳实践:统一的错误码、日志格式、链路追踪方案。
高级玩法
- 多租户架构:数据库级隔离 vs Schema 级隔离 vs 行级隔离的详细对比和实现代码。
- Serverless 冷启动优化:针对 AWS Lambda/Vercel Edge Functions 的代码加载、连接池复用策略。
- 事件驱动架构:从简单的 Pub/Sub 到复杂的 Event Sourcing + CQRS,Skill 提供渐进式升级路径。
小技巧
- 设计 API 时先用 Skill 检查一遍:是否符合 REST 语义、错误码是否标准、认证方式是否合理。
- 数据库迁移尽量用 ORM 的 Migration 工具(Prisma Migrate/Alembic),不要手写 SQL。
- 日志用结构化格式(JSON),方便后续接入 ELK/Datadog 等日志平台。
- 接口超时设置遵循”外部依赖 < 内部服务 < 用户请求”的嵌套原则。
- 关注 ECC 仓库的更新——每周新增长来自真实项目的生产配置。
常见问题 FAQ
Q1: 这个 Skill 跟 affaanm-backend-patterns 有什么关系?必须装吗?
A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。
Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?
A: affaanm-backend-patterns 来自社区,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。
Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?
A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。
Q4: 怎么验证 Skill 装对了?
A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。
Q5: 这个 Skill 有许可证吗?能商用吗?
A: 取决于 affaanm-backend-patterns 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。
参考链接
backend-patterns Skill 多维度简评
类别:后端开发 / 架构 仓库:affaan-m/everything-claude-code 维护者:affaan-m(Anthropic 黑客马拉松获胜者) 含金量:经过 10+ 个月构建真实产品演化
一、核心定位与价值
这不是”AI 写的后端模板”——这是Anthropic 黑客马拉松获胜者在他真实生产项目中使用 10 个月后沉淀下来的后端架构最佳实践。
它的价值在于:
- ✅ 真实战场验证:不是 demo,是 10000+ 行生产代码
- ✅ 跨语言适用:Node.js / Python / Go / Java 都用得上
- ✅ 覆盖完整 SDLC:从 API 设计到部署监控
- ✅ 可量化:每条规则都有反例和正例
二、SKILL.md 标准结构
---
name: backend-patterns
description: Backend architecture patterns, API design, database optimization,
and server-side best practices. Use when designing or implementing backend services.
license: MIT
---
完整 SKILL.md 包含:
- Overview - 概述与适用场景
- When to Use - 何时触发
- Patterns - 具体的模式集合
- Anti-Patterns - 反模式
- Examples - 完整示例代码
- References - 详细参考
三、12 大核心模式
模式 1:REST API 资源命名
原则:资源用名词复数,不是动词
✅ GET /api/v1/users
✅ POST /api/v1/users
✅ GET /api/v1/users/:id
✅ PUT /api/v1/users/:id
✅ PATCH /api/v1/users/:id
✅ DELETE /api/v1/users/:id
❌ GET /api/v1/getUsers
❌ POST /api/v1/createUser
❌ GET /api/v1/userList
模式 2:状态码语义化
| 场景 | 状态码 |
|---|---|
| 成功 | 200 OK |
| 创建成功 | 201 Created |
| 删除成功(无 body) | 204 No Content |
| 客户端错误(语法错误) | 400 Bad Request |
| 未认证 | 401 Unauthorized |
| 已认证但无权限 | 403 Forbidden |
| 资源不存在 | 404 Not Found |
| 资源冲突(重复) | 409 Conflict |
| 验证失败 | 422 Unprocessable Entity |
| 服务器错误 | 500 Internal Server Error |
模式 3:分页策略
Cursor-based(推荐用于大数据):
GET /api/v1/users?cursor=eyJpZCI6MTAwfQ&limit=20
Response:
{
"data": [...],
"next_cursor": "eyJpZCI6MTIwfQ",
"has_more": true
}
Offset-based(适合小数据):
GET /api/v1/users?page=1&page_size=20
Response:
{
"data": [...],
"pagination": {
"page": 1,
"page_size": 20,
"total": 1523,
"total_pages": 77
}
}
模式 4:过滤 / 排序
GET /api/v1/users?status=active&role=admin&sort=-created_at,name
支持的查询参数:
- 字段=值:精确匹配
- 字段[in]=a,b,c:包含
- 字段[gt]=10:大于
- 字段[between]=10,20:范围
- sort=-field,field:负号降序
模式 5:统一错误响应
{
"error": {
"code": "INVALID_INPUT",
"message": "邮箱格式不正确",
"details": [
{
"field": "email",
"code": "INVALID_FORMAT",
"message": "邮箱必须包含 @"
}
],
"request_id": "req_abc123",
"timestamp": "2026-06-15T12:34:56Z"
}
}
关键:
code:机器可读(PROGRAMMABLE)message:人类可读details:字段级错误request_id:用于追踪- 不要泄露内部栈
模式 6:API 版本控制
3 种策略对比:
| 策略 | URL 示例 | 优点 | 缺点 |
|---|---|---|---|
| URL Path | /api/v1/users | 清晰、易缓存 | URL 变长 |
| Header | Accept: application/vnd.api.v2+json | URL 干净 | 难调试 |
| Query Param | /api/users?version=2 | 灵活 | 容易遗漏 |
推荐:URL Path(最常用、最易理解)
模式 7:速率限制(Rate Limiting)
// 滑动窗口示例(伪代码)
const WINDOW = 60 * 1000; // 1 分钟
const MAX_REQUESTS = 100;
function rateLimit(userId) {
const key = `rate:${userId}`;
const requests = redis.lrange(key, 0, -1);
// 清理过期
const now = Date.now();
redis.lrem(key, 0, `${now - WINDOW}`);
if (requests.length >= MAX_REQUESTS) {
throw new RateLimitError('请求过于频繁,请稍后重试', {
'X-RateLimit-Limit': MAX_REQUESTS,
'X-RateLimit-Remaining': 0,
'Retry-After': Math.ceil(WINDOW / 1000)
});
}
redis.lpush(key, now);
redis.expire(key, Math.ceil(WINDOW / 1000));
}
响应头:
X-RateLimit-Limit:总配额X-RateLimit-Remaining:剩余X-RateLimit-Reset:重置时间Retry-After:重试等待秒数
模式 8:JWT 认证
// Token 签发
function issueToken(user) {
return jwt.sign(
{ sub: user.id, role: user.role },
process.env.JWT_SECRET,
{ expiresIn: '1h', issuer: 'myapp' }
);
}
// Token 验证
function verifyToken(token) {
try {
return jwt.verify(token, process.env.JWT_SECRET, {
issuer: 'myapp',
algorithms: ['HS256'] // 防止算法混淆攻击
});
} catch (e) {
throw new UnauthorizedError('Invalid token');
}
}
// 中间件
function authMiddleware(req, res, next) {
const authHeader = req.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Missing Authorization header' });
}
const token = authHeader.slice(7);
try {
req.user = verifyToken(token);
next();
} catch (e) {
return res.status(401).json({ error: 'Invalid token' });
}
}
关键安全实践:
- ✅ HTTPS only
- ✅ HttpOnly cookie(避免 XSS)
- ✅ 短 access token + 长 refresh token
- ✅ 算法白名单(防止
alg: none) - ✅ issuer + audience 校验
模式 9:数据库 Schema 设计原则
-- ✅ 软删除 + 审计字段
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
name VARCHAR(100) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'active',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ
);
CREATE INDEX idx_users_email ON users(email) WHERE deleted_at IS NULL;
CREATE INDEX idx_users_created_at ON users(created_at DESC);
审计字段:
created_at:创建时间updated_at:更新时间(trigger 自动维护)deleted_at:软删除(NULL = 未删除)
索引原则:
- WHERE 子句常用字段建索引
- 复合索引按选择性排序
- 部分索引:
WHERE deleted_at IS NULL
模式 10:缓存策略
Cache-Aside(最常用):
1. 读:先查 Redis,未命中则查 DB,写入 Redis
2. 写:更新 DB,删除 Redis(lazy invalidation)
3. TTL:根据数据更新频率
写穿透(Write-Through):
- 同步写 DB + Redis
- 强一致,但性能差
写回(Write-Behind):
- 异步写 DB
- 高性能,但可能丢失
Cache Stampede 防护:
- singleflight:同一 key 只查一次 DB
- 随机 TTL:避免雪崩
模式 11:消息队列
// Kafka 示例
async function publishEvent(topic, payload) {
await producer.send({
topic,
messages: [{
key: payload.id,
value: JSON.stringify(payload),
headers: {
'content-type': 'application/json',
'event-type': payload.type,
'trace-id': getTraceId()
}
}]
});
}
// Consumer:幂等消费
async function processMessage(message) {
const { id, type, data } = JSON.parse(message.value.toString());
// 幂等键:检查是否已处理
if (await redis.sismember('processed:events', id)) {
console.log(`Event ${id} already processed, skip`);
return;
}
await handleEvent(type, data);
// 标记已处理(成功后才标记)
await redis.sadd('processed:events', id);
}
幂等性关键:
- 业务 ID 作为幂等键
- 数据库唯一索引
- Redis SETNX 临时锁
- 处理成功后才提交 offset
模式 12:可观测性
日志(Logging):
- 结构化:JSON 格式
- 字段:timestamp、level、service、trace_id、message、context
- 工具:Loki / ELK / CloudWatch
指标(Metrics):
- RED:Rate(请求率)、Errors(错误率)、Duration(延迟)
- USE:Utilization、Saturation、Errors
- 工具:Prometheus + Grafana
追踪(Tracing):
- OpenTelemetry 标准
- 跨服务 trace_id 关联
- 工具:Jaeger / Zipkin / Tempo
四、6 大实战场景
场景 1:设计 SaaS API
用 backend-patterns 为我的 SaaS 设计完整 API:
- /api/v1/auth(注册、登录、刷新)
- /api/v1/users(CRUD)
- /api/v1/billing(订阅、发票)
- /api/v1/webhooks(事件回调)
- 错误格式、限流、JWT
场景 2:数据库 Schema 设计
设计一个电商系统的 schema:
- users / products / orders / payments / reviews
- 索引、约束、审计字段
- 软删除
场景 3:缓存架构
用 backend-patterns 设计 Redis 缓存策略:
- 哪些数据缓存
- TTL 设置
- 一致性保证
- 雪崩 / 穿透 / 击穿防护
场景 4:统一错误处理
设计错误处理中间件:
- 自定义错误类
- HTTP 状态码映射
- 用户友好提示
- 日志记录
- request_id 追踪
场景 5:异步任务系统
设计订单支付的异步流程:
- 任务队列选型(Kafka / RabbitMQ / BullMQ)
- 幂等性保证
- 重试策略(指数退避)
- 死信队列
场景 6:微服务拆分
我的单体应用想拆为微服务:
- 边界识别
- API 网关
- 服务间通信
- 数据一致性(Saga / 2PC)
- 可观测性
五、5 大反模式(必须避免)
反模式 1:上帝服务(God Service)
❌ 一个 service 10000+ 行
✅ 按业务边界拆分为多个 service
反模式 2:业务逻辑在 Controller
❌ controller 直接操作数据库
✅ controller 只做请求/响应转换,业务在 service 层
反模式 3:缺乏幂等性
❌ 重试导致重复扣款
✅ 每个操作有唯一 ID,重复请求返回原结果
反模式 4:同步调用链过长
❌ A → B → C → D → E(同步,5 秒延迟)
✅ 异步解耦,关键路径用消息队列
反模式 5:硬编码配置
❌ 数据库密码写在代码里
✅ 环境变量 + 密钥管理服务
六、安装
# Claude Code
/plugin marketplace add affaan-m/everything-claude-code
/plugin install backend-patterns@affaan-m
# 通用
npx skills add affaan-m/everything-claude-code --skill backend-patterns
七、6 条实战技巧
- RESTful 而非 RPC:URL 用资源,不用动词
- 错误格式统一:前端能稳定解析
- 状态码语义化:404 vs 400 vs 422 区别使用
- OpenAPI 规范:用 YAML 定义,自动生成文档
- HATEOAS:超媒体链接(高级场景)
- GraphQL 考虑:复杂关系用 GraphQL 更合适
参考资料
- affaan-m/everything-claude-code GitHub
- REST API 设计指南 - Microsoft
- JWT 最佳实践 - IETF RFC 7519
- OpenTelemetry 官方文档
- Redis 缓存策略
八、5 条反合理化
| 借口 | 反驳 |
|---|---|
| ”我们的 API 不规范也工作” | 等团队扩大、客户端多了,会出大事 |
| ”REST 太老派” | REST 仍是 API 主流,GraphQL 是补充不是替代 |
| ”状态码无所谓” | 5xx vs 4xx 影响监控告警策略 |
| ”错误格式不一致没事” | 前端要写 10 套解析,崩溃 |
| ”版本控制不用” | 不做版本控制 = 一次发布永远不能改 |
九、与其他 Skill 配合
| 配合 | 场景 |
|---|---|
| api-and-interface-design | 详细的 API 设计方法论 |
| postgres-patterns | 数据库设计 |
| clickhouse-io | OLAP 查询优化 |
| cloud-infrastructure-security | IAM、安全 |
| ci-cd-and-automation | 自动化部署 |
十、Q&A
Q: REST vs GraphQL 怎么选? A: 简单 CRUD 用 REST;复杂关系、客户端多端用 GraphQL。
Q: JWT 还是 Session? A: 移动 App 用 JWT(无状态),传统 Web 用 Session + Cookie。
Q: 错误信息返回堆栈吗?
A: 生产环境绝对不行。开发环境可以用 ?debug=true。
Q: API 网关必须吗? A: 微服务必需,单体可省。
Q: gRPC 何时用? A: 服务间高性能通信,移动 App 不适合(浏览器不支持)。
十一、总结
核心价值:
- 黑客马拉松冠军 10+ 个月实战沉淀
- 12 大模式覆盖完整后端架构
- 5 大反模式 + 6 大实战场景
适用人群:
- 所有后端工程师
- 全栈开发者
- 架构师
- Tech Lead
投入产出比:⭐⭐⭐⭐⭐(5/5)—— 必装。
📊 评分与标签
评分说明
总分 8.6/10 · P_优选
📊 可观测社区指标(数据核验日期:2026-07-07)
- GitHub: affaan-m/everything-claude-code ★212k, 🔱32.5k, 230+ contributors
- 页面访问核验:MIT 许可,Anthropic 黑客马拉松获奖项目
- 许可证: MIT
📦 可安装性 2.3/2.5
- Git clone 后软链即用,纯配置 Skill 无需编译
- 来源:ECC README
- Claude Code Plugin 一键安装支持
- 来源:ECC 安装文档
- 竞品对比 1:obra/superpowers 有
npx skills add一键安装 - 竞品对比 2:手动查阅后端模式书籍/文章,学习成本更高
🎯 实用性 2.4/2.5
- 10+ 真实生产配置模板覆盖 API 设计、数据库优化、认证鉴权、微服务拆分等核心后端场景
- 引用 Stripe/Twilio/Notion/Vercel 等公司真实架构决策,非教科书泛化模式
- 来源:页面访问核验
- 竞品对比 1:传统设计模式书籍(GoF)偏理论,缺少 AI Agent 可直接引用的配置模板
- 竞品对比 2:System Design Primer(★300k+)覆盖面更广但无 Agent Skills 集成
📖 文档质量 1.8/2.0
- ECC 仓库文档全面,backend-patterns 为 183 个 Skill 之一,有独立 SKILL.md
- 包含每个模式的”适用场景”和”不要用”的反面信号,避免过度设计
- 来源:页面访问核验
- 竞品对比 1:System Design Primer 文档更系统化(含图示和视频),但无 Agent 集成
- 竞品对比 2:Anthropic 官方技能文档有 SPEC.md 规范,ECC 缺少统一技能编写规范
👥 社区活跃 1.4/1.5
- GitHub ★212k,全平台最热门的 Agent 配置仓库之一
- 来源:GitHub 仓库首页(2026-07-07 页面访问核验)
- 230+ contributors, 12+ language ecosystems,持续高频更新
- 来源:GitHub 仓库
- 竞品对比 1:obra/superpowers ★248k 体量更大,ECC 的 contributors 多样性更高
- 竞品对比 2:Anthropic 官方技能 ★159k,ECC 社区活跃度更胜一筹
🔗 兼容性 0.7/1.5
- MIT 许可,开源友好
- 来源:LICENSE
- 跨 harness 支持(Claude Code/Codex/OpenCode/Cursor/Windsurf)
- 来源:ECC README
- 竞品对比 1:obra/superpowers 支持 12+ 平台
- 竞品对比 2:Anthropic 官方技能兼容面较窄(Claude Code + Cursor)
评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。
🏷️ 标签说明
- 免费: 核心功能完全免费,MIT 开源许可。来源: LICENSE
- 编程: 后端开发 Skill,需要编程基础。来源: 功能描述
- 设计模式: 聚焦后端架构模式和设计最佳实践。来源: 功能描述
- API: 覆盖 API 设计、RESTful 规范等。来源: 功能描述
📋 来源与核验记录
- ✅ 已核验: affaan-m/everything-claude-code(★212k, 🔱32.5k, 活跃确认)
- ✅ 已核验: LICENSE(MIT 许可确认)
- ⚠️ 未验证(间接来源): backend-patterns Skill 的具体内容——需在 Agent 中安装 ECC 后深入验证
- ❌ 已删除死链: 无