$ loading_
帮助开发者掌握后端架构模式、API 设计与数据库性能优化实践
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "backend-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/.kiro/skills/backend-patterns/SKILL.md 2. 保存为 ~/.claude/skills/backend-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请为一个电商订单系统设计 Node.js + Express 后端架构,包含路由分层、服务层、仓储层、错误处理、中间件和鉴权方案,并说明这样设计的原因。
一套清晰的后端分层架构方案,附模块职责与设计理由。
我有一个高频查询的用户行为表,请分析常见性能瓶颈,并给出索引设计、分页策略、查询改写和缓存方案,适用于 PostgreSQL 或 MySQL。
针对数据库性能问题的诊断思路与可执行优化建议清单。
请为 Next.js API Routes 制定一套最佳实践,包括请求校验、统一响应格式、异常处理、限流、日志记录和安全注意事项,并提供示例代码结构。
一份适用于 Next.js 服务端接口的规范与示例结构说明。
Backend architecture patterns and best practices for scalable server-side applications.
// PASS: Resource-based URLs
GET /api/markets # List resources
GET /api/markets/:id # Get single resource
POST /api/markets # Create resource
PUT /api/markets/:id # Replace resource
PATCH /api/markets/:id # Update resource
DELETE /api/markets/:id # Delete resource
// PASS: Query parameters for filtering, sorting, pagination
GET /api/markets?status=active&sort=volume&limit=20&offset=0
// Abstract data access logic
interface MarketRepository {
findAll(filters?: MarketFilters): Promise<Market[]>
findById(id: string): Promise<Market | null>
create(data: CreateMarketDto): Promise<Market>
update(id: string, data: UpdateMarketDto): Promise<Market>
delete(id: string): Promise<void>
}
class SupabaseMarketRepository implements MarketRepository {
async findAll(filters?: MarketFilters): Promise<Market[]> {
let query = supabase.from('markets').select('*')
if (filters?.status) {
query = query.eq('status', filters.status)
}
if (filters?.limit) {
query = query.limit(filters.limit)
}
const { data, error } = await query
if (error) throw new Error(error.message)
return data
}
// Other methods...
}
// Business logic separated from data access
class MarketService {
constructor(private marketRepo: MarketRepository) {}
async searchMarkets(query: string, limit: number = 10): Promise<Market[]> {
// Business logic
const embedding = await generateEmbedding(query)
const results = await this.vectorSearch(embedding, limit)
// Fetch full data
const markets = await this.marketRepo.findByIds(results.map(r => r.id))
// Sort by similarity
return markets.sort((a, b) => {
const scoreA = results.find(r => r.id === a.id)?.score || 0
const scoreB = results.find(r => r.id === b.id)?.score || 0
return scoreA - scoreB
})
}
private async vectorSearch(embedding: number[], limit: number) {
// Vector search implementation
}
}
// Request/response processing pipeline
export function withAuth(handler: NextApiHandler): NextApiHandler {
return async (req, res) => {
const token = req.headers.authorization?.replace('Bearer ', '')
if (!token) {
return res.status(401).json({ error: 'Unauthorized' })
}
try {
const user = await verifyToken(token)
req.user = user
return handler(req, res)
} catch (error) {
return res.status(401).json({ error: 'Invalid token' })
}
}
}
// Usage
export default withAuth(async (req, res) => {
// Handler has access to req.user
})
// PASS: GOOD: Select only needed columns
const { data } = await supabase
.from('markets')
.select('id, name, status, volume')
.eq('status', 'active')
.order('volume', { ascending: false })
.limit(10)
// FAIL: BAD: Select everything
const { data } = await supabase
.from('markets')
.select('*')
// FAIL: BAD: N+1 query problem
const markets = await getMarkets()
for (const market of markets) {
market.creator = await getUser(market.creator_id) // N queries
}
// PASS: GOOD: Batch fetch
const markets = await getMarkets()
…
帮助开发者为代码代理配置性能优化、安全防护与研究优先工作流。
提供数据库迁移、回滚与零停机发布的最佳实践指导,适用于多种 ORM 与 SQL 数据库。
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助你掌握地道 Rust 模式、所有权与并发实践,编写安全高性能应用。
基于 C++ Core Guidelines 编写、审查并重构更安全现代的 C++ 代码。
为 Claude Code 会话提供系统化校验流程,帮助检查结果正确性与质量。
帮助开发者梳理后端架构模式、API设计与数据库优化最佳实践
为 Node.js 与 Next.js 项目提供后端架构、API 设计与数据库优化建议。
为 Node.js、Express 与 Next.js API 提供后端架构、接口设计与性能优化指导。
帮助你设计与优化 Spring Boot 后端架构、接口与服务实现。
帮助用户设计和实现 Spring Boot 后端架构、REST API 与常见工程模式。
帮助你规划与实现 Spring Boot 后端架构、接口与常用工程模式。