
后端架构模式、API设计、数据库优化以及Node.js、Express和Next.js API路由的服务器端最佳实践。技能概述cc-skill-backend-patterns 技能是一个专注于后端开发模式和最佳实践的技能。它提供了可扩展服务器端应用的架构模式包括API设计、数据库优化、缓存策略、错误处理、认证授权、速率限制、后台作业和日志监控等方面的详细指导和代码示例。该技能帮助开发者构建健壮、可维护的后端系统。下载地址https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/cc-skill-backend-patterns主要功能API设计模式RESTful API结构、仓储模式、服务层模式、中间件模式数据库模式查询优化、N1查询预防、事务模式缓存策略Redis缓存层、Cache-Aside模式错误处理模式集中式错误处理器、指数退避重试机制认证和授权JWT令牌验证、基于角色的访问控制RBAC速率限制简单的内存速率限制器实现后台作业和队列简单队列模式、异步作业处理日志和监控结构化日志记录、请求追踪触发条件在以下情况下应该调用此技能:需要设计和实现可扩展的后端架构需要优化API设计和数据库查询性能需要实现认证、授权和安全机制需要处理错误、实现缓存或后台作业需要建立日志和监控系统使用场景场景1API设计当需要设计RESTful API或实现仓储模式、服务层模式时可以使用此技能获取最佳实践和代码示例。场景2性能优化当需要优化数据库查询、实现缓存策略或解决N1查询问题时可以参考技能提供的优化模式。场景3安全实现当需要实现JWT认证、基于角色的访问控制或速率限制时可以使用此技能获取实现方案。场景4系统可靠性当需要实现错误处理、重试机制、后台作业或日志监控时可以参考技能提供的模式和实现。处理过程1. API设计模式提供RESTful API设计指南包括资源导向的URL结构、查询参数使用、仓储模式抽象数据访问、服务层分离业务逻辑、中间件处理请求响应管道。2. 数据库优化指导如何优化数据库查询包括选择所需列、预防N1查询问题、使用事务确保数据一致性。3. 缓存实现提供Redis缓存层实现和Cache-Aside模式帮助提升应用性能和响应速度。4. 错误处理提供集中式错误处理器和指数退避重试机制确保应用的健壮性和可靠性。5. 认证授权提供JWT令牌验证和基于角色的访问控制实现确保应用的安全性。6. 其他模式提供速率限制、后台作业队列、结构化日志等实现模式帮助构建完整的生产级应用。输入要求使用此技能时用户需要提供:项目的技术栈Node.js、Express、Next.js等需要解决的具体问题或需要实现的功能当前的架构设计和代码结构性能要求和安全需求输出说明技能将提供:架构设计建议和最佳实践详细的代码示例和实现方案性能优化建议安全实现指导错误处理和监控方案使用示例示例1仓储模式实现interface MarketRepository {findAll(filters?: MarketFilters): PromiseMarket[]findById(id: string): PromiseMarket | nullcreate(data: CreateMarketDto): PromiseMarketupdate(id: string, data: UpdateMarketDto): PromiseMarketdelete(id: string): Promisevoid}class SupabaseMarketRepository implements MarketRepository {async findAll(filters?: MarketFilters): PromiseMarket[] {let query supabase.from(markets).select(*)if (filters?.status) {query query.eq(status, filters.status)}const { data, error } await queryif (error) throw new Error(error.message)return data}}示例2集中式错误处理class ApiError extends Error {constructor(public statusCode: number,public message: string,public isOperational true) {super(message)Object.setPrototypeOf(this, ApiError.prototype)}}export function errorHandler(error: unknown, req: Request): Response {if (error instanceof ApiError) {return NextResponse.json({ success: false, error: error.message },{ status: error.statusCode })}if (error instanceof z.ZodError) {return NextResponse.json({ success: false, error: Validation failed, details: error.errors },{ status: 400 })}return NextResponse.json({ success: false, error: Internal server error },{ status: 500 })}示例3JWT认证import jwt from jsonwebtokeninterface JWTPayload {userId: stringemail: stringrole: admin | user}export function verifyToken(token: string): JWTPayload {try {const payload jwt.verify(token, process.env.JWT_SECRET!) as JWTPayloadreturn payload} catch (error) {throw new ApiError(401, Invalid token)}}export async function requireAuth(request: Request) {const token request.headers.get(authorization)?.replace(Bearer , )if (!token) {throw new ApiError(401, Missing authorization token)}return verifyToken(token)}最佳实践使用仓储模式抽象数据访问逻辑使业务逻辑与数据库实现分离优化查询只选择需要的列避免N1查询问题实现缓存使用Redis等缓存层减少数据库负载集中错误处理统一处理错误提供一致的错误响应使用事务确保数据一致性特别是在多个操作时实现速率限制防止滥用和保护API结构化日志使用JSON格式记录日志便于搜索和分析重试机制对于临时性故障使用指数退避重试限制说明仅在任务明确匹配上述范围时使用此技能不要将输出视为环境特定验证、测试或专家审查的替代品如果缺少必需的输入、权限、安全边界或成功标准请停止并请求澄清