Backend
Backend development patterns for services, error handling, logging, caching. Use when building backend services, APIs, or microservices.From its SKILL.md
npx -y skills add xiaobei930/cc-best --skill backendAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
7.0 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
后端开发模式
本技能提供后端服务开发的最佳实践和模式,支持多语言按需加载。
触发条件
- 构建后端服务
- 设计服务架构
- 实现业务逻辑层
- 配置中间件
- 处理错误和日志
- 性能优化(数据库、缓存、并发)
语言专属模式
根据项目技术栈,加载对应的语言专属文件:
| 技术栈 | 加载文件 | 框架 |
|---|---|---|
| Python | python.md | FastAPI, Django, Flask |
| TypeScript/Node.js | typescript.md | Express, NestJS, Fastify |
| Java | java.md | Spring Boot, Quarkus |
| Go | go.md | Gin, Echo, Fiber |
| C# | csharp.md | ASP.NET Core |
| Rust | rust.md | Axum, Actix-web, Rocket |
加载方式: 检测项目中的 pyproject.toml/package.json/pom.xml/go.mod/Cargo.toml 等文件确定技术栈。
通用架构模式
分层架构
┌─────────────────────────────────────┐
│ Controller 层 │ 处理 HTTP 请求/响应
├─────────────────────────────────────┤
│ Service 层 │ 业务逻辑
├─────────────────────────────────────┤
│ Repository 层 │ 数据访问
├─────────────────────────────────────┤
│ Model 层 │ 数据模型
└─────────────────────────────────────┘
通用目录结构
src/
├── controllers/ # 控制器(或 routes/handlers)
├── services/ # 业务逻辑
├── repositories/ # 数据访问(或 dal/)
├── models/ # 数据模型(或 entities/)
├── middlewares/ # 中间件
├── utils/ # 工具函数
├── config/ # 配置
└── types/ # 类型定义(如适用)
通用最佳实践
1. 错误处理原则
┌─────────────────────────────────────────────────────┐
│ 错误处理金字塔 │
├─────────────────────────────────────────────────────┤
│ 业务错误 (400-499) │
│ ├─ ValidationError (400) 输入验证失败 │
│ ├─ UnauthorizedError (401) 未认证 │
│ ├─ ForbiddenError (403) 无权限 │
│ └─ NotFoundError (404) 资源不存在 │
├─────────────────────────────────────────────────────┤
│ 系统错误 (500-599) │
│ ├─ InternalError (500) 服务器内部错误 │
│ ├─ ServiceUnavailable (503) 服务不可用 │
│ └─ GatewayTimeout (504) 网关超时 │
└─────────────────────────────────────────────────────┘
原则:
- 自定义错误类继承基础错误
- 统一错误响应格式
- 区分可操作错误和程序错误
- 记录足够的上下文用于调试
2. 日志规范
日志级别:
| 级别 | 用途 | 示例 |
|---|---|---|
| ERROR | 需要立即关注的错误 | 数据库连接失败 |
| WARN | 潜在问题 | 重试成功、降级处理 |
| INFO | 重要业务事件 | 用户登录、订单创建 |
| DEBUG | 开发调试信息 | 变量值、执行路径 |
结构化日志字段:
{
"timestamp": "2025-01-22T10:00:00Z",
"level": "info",
"message": "用户登录成功",
"requestId": "uuid",
"userId": "123",
"duration": 45
}
3. 缓存策略
| 策略 | 适用场景 | TTL 建议 |
|---|---|---|
| Cache-Aside | 读多写少 | 5-60 分钟 |
| Write-Through | 强一致性要求 | 短 TTL |
| Write-Behind | 写多读少 | 根据业务 |
缓存键命名:
{service}:{entity}:{id}
{service}:{entity}:list:{hash}
4. API 设计原则
- RESTful 资源导向
- 版本控制
/api/v1/... - 统一响应格式
- 幂等性 PUT/DELETE 操作
- 分页 大列表查询
5. 安全检查清单
- 输入验证(白名单优先)
- SQL/NoSQL 注入防护
- 认证令牌安全存储
- 敏感数据加密
- 速率限制
- CORS 配置
通用代码模式
统一响应格式
成功响应:
{
"success": true,
"data": { ... },
"meta": { "total": 100, "page": 1 }
}
错误响应:
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "邮箱格式不正确"
}
}
健康检查端点
GET /health
{
"status": "ok",
"timestamp": "2025-01-22T10:00:00Z",
"services": {
"database": { "status": "ok" },
"redis": { "status": "ok" }
}
}
优雅关闭
1. 收到 SIGTERM 信号
2. 停止接受新请求
3. 等待进行中的请求完成(超时时间内)
4. 关闭数据库连接
5. 关闭其他资源
6. 退出进程
语言专属内容
详细的语言专属实现请参考:
- Python: python.md - FastAPI/Django/Flask
- TypeScript: typescript.md - Express/NestJS
- Java: java.md - Spring Boot
- Go: go.md - Gin/Echo
- C#: csharp.md - ASP.NET Core
- Rust: rust.md - Axum/Actix-web/Rocket
专项优化
- 性能优化: performance.md - 数据库、缓存、并发优化
Python 进阶
- 设计模式: python-patterns.md - KISS、组合、策略模式
- 类型提示: python-types.md - Protocol、泛型、TypeGuard
- 可观测性: python-observability.md - 日志、指标、追踪
Maintenance
- Sources: 各语言官方文档, 12-Factor App
- Last updated: 2025-01-22
- Pattern: 通用清单 + 按需加载语言专属
记住: 后端代码的质量标准是可维护性——类型安全、错误处理、日志追踪缺一不可。
What ships with it: 10 files
135.1 KB alongside SKILL.md
- csharp.md17.0 KB
- go.md21.3 KB
- java.md12.5 KB
- performance.md10.2 KB
- python.md21.2 KB
- python-observability.md10.2 KB
- python-patterns.md8.0 KB
- python-types.md7.8 KB
- rust.md9.2 KB
- typescript.md17.6 KB
Gives 0 of the 12 instructions most data backend skills give in ~2.0k tokens
Counted across 258 of the 277 authors here whose files we hold, read 2026-09-06
- Centralize error handling in one handlerin 38 of 258, across 20 files
- Select only needed columns in queriesin 36 of 258, across 18 files
- Check cache before querying the databasein 36 of 258, across 19 files
- Wrap multi-step writes in transactionsin 36 of 258, across 18 files
- Retry failed requests with exponential backoffin 36 of 258, across 18 files
- Batch fetch related records to avoid N+1 queriesin 34 of 258, across 16 files
- Use resource-based URLs for REST endpointsin 31 of 258, across 13 files
- Separate business logic into a service layerin 29 of 258, across 17 files
- Queue background jobs instead of blocking requestsin 29 of 258, across 14 files
- Abstract data access behind repository interfacesin 25 of 258, across 13 files
- Log structured JSON with request contextin 15 of 258, across 7 files
- Use a shared store for rate limitingin 14 of 258, across 6 files
Said here and by no other author read
- Load the language-specific file matching the stack
- Make custom error classes inherit a base error
- Return errors in a unified format
- Distinguish actionable errors from program errors
- Log enough context for debugging
- Choose a cache strategy and TTL per access pattern
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.