📚 后端开发 全难度 📦 community

backend-patterns

后端架构模式、API 设计、数据库优化、服务端最佳实践。

📄 相关文章

📊 评分明细

📦 打包完整度
2.2 2.2 / 2.5
🎯 实用性
2.2 2.2 / 2.5
📖 文档清晰度
1.8 1.8 / 2
👥 社区影响力
1.3 1.3 / 1.5
🔗 集成度
1.3 1.3 / 1.5

🎯 适用场景

开源免费编程设计模式API

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 生成的代码开始实现。

常见踩坑

  1. 照搬大公司架构:Stripe 的 API 版本策略适合有 100+ 外部开发者的平台,3 人团队的内部 API 不需要这么复杂的版本管理。Skill 会根据项目规模给出适配建议。
  2. 过度设计:看到 Skill 中的 CQRS/Event Sourcing 模式就想用,但大部分 CRUD 应用不需要。Skill 会标注每个模式的适用场景和”不要用”的信号。
  3. 数据库索引迷信:不是所有查询都需要索引,加了索引反而拖慢写入速度。Skill 包含索引决策树帮助你判断。
  4. 缓存一致性问题:用 Redis 缓存数据库查询后,更新数据时忘了失效缓存,导致读到旧数据。Skill 有完整的 Cache-Aside/Write-Through/Write-Behind 模式对比。
  5. 事务边界不清晰:微服务架构下,跨服务的事务处理是最大痛点。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 包含:

  1. Overview - 概述与适用场景
  2. When to Use - 何时触发
  3. Patterns - 具体的模式集合
  4. Anti-Patterns - 反模式
  5. Examples - 完整示例代码
  6. 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 变长
HeaderAccept: application/vnd.api.v2+jsonURL 干净难调试
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 条实战技巧

  1. RESTful 而非 RPC:URL 用资源,不用动词
  2. 错误格式统一:前端能稳定解析
  3. 状态码语义化:404 vs 400 vs 422 区别使用
  4. OpenAPI 规范:用 YAML 定义,自动生成文档
  5. HATEOAS:超媒体链接(高级场景)
  6. GraphQL 考虑:复杂关系用 GraphQL 更合适

参考资料

  1. affaan-m/everything-claude-code GitHub
  2. REST API 设计指南 - Microsoft
  3. JWT 最佳实践 - IETF RFC 7519
  4. OpenTelemetry 官方文档
  5. Redis 缓存策略

八、5 条反合理化

借口反驳
”我们的 API 不规范也工作”等团队扩大、客户端多了,会出大事
”REST 太老派”REST 仍是 API 主流,GraphQL 是补充不是替代
”状态码无所谓”5xx vs 4xx 影响监控告警策略
”错误格式不一致没事”前端要写 10 套解析,崩溃
”版本控制不用”不做版本控制 = 一次发布永远不能改

九、与其他 Skill 配合

配合场景
api-and-interface-design详细的 API 设计方法论
postgres-patterns数据库设计
clickhouse-ioOLAP 查询优化
cloud-infrastructure-securityIAM、安全
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)—— 必装。


配套文档:postgres-patterns 数据库 | clickhouse-io OLAP

📊 评分与标签

评分说明

总分 8.6/10 · P_优选

📊 可观测社区指标(数据核验日期:2026-07-07)

📦 可安装性 2.3/2.5

  • Git clone 后软链即用,纯配置 Skill 无需编译
  • Claude Code Plugin 一键安装支持
  • 竞品对比 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 配置仓库之一
  • 230+ contributors, 12+ language ecosystems,持续高频更新
  • 竞品对比 1:obra/superpowers ★248k 体量更大,ECC 的 contributors 多样性更高
  • 竞品对比 2:Anthropic 官方技能 ★159k,ECC 社区活跃度更胜一筹

🔗 兼容性 0.7/1.5

  • MIT 许可,开源友好
  • 跨 harness 支持(Claude Code/Codex/OpenCode/Cursor/Windsurf)
  • 竞品对比 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 后深入验证
  • ❌ 已删除死链: 无