# Backend Patterns

后端架构模式、API 设计、数据库优化以及适用于 Node.js、Express 和 Next.js API 路由的服务端最佳实践。

- Repository: https://github.com/xu-xiang/everything-claude-code-zh (2012 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-03-05
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add xu-xiang/everything-claude-code-zh --skill backend-patterns -g -a claude-code -y`
Codex: `npx skills add xu-xiang/everything-claude-code-zh --skill backend-patterns -g -a codex -y`
Cursor: `npx skills add xu-xiang/everything-claude-code-zh --skill backend-patterns -g -a cursor -y`
Gemini CLI: `npx skills add xu-xiang/everything-claude-code-zh --skill backend-patterns -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add xu-xiang/everything-claude-code-zh`

## Description

后端架构模式、API 设计、数据库优化以及适用于 Node.js、Express 和 Next.js API 路由的服务端最佳实践。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 后端开发模式 (Backend Development Patterns)

后端架构模式以及构建可扩展服务端应用的最佳实践。

## 启用时机 (When to Activate)

- 设计 REST 或 GraphQL API 端点时
- 实现仓库（Repository）、服务（Service）或控制器（Controller）层时
- 优化数据库查询（N+1、索引、连接池）时
- 添加缓存（Redis、内存缓存、HTTP 缓存头）时
- 设置后台作业或异步处理时
- 为 API 构建错误处理和验证结构时
- 编写中间件（鉴权、日志、速率限制）时

## API 设计模式 (API Design Patterns)

### RESTful API 结构

```typescript
// ✅ 基于资源的 URL
GET    /api/markets                 # 列出资源
GET    /api/markets/:id             # 获取单个资源
POST   /api/markets                 # 创建资源
PUT    /api/markets/:id             # 替换资源
PATCH  /api/markets/:id             # 更新资源
DELETE /api/markets/:id             # 删除资源

// ✅ 用于过滤、排序、分页的查询参数
GET /api/markets?status=active&sort=volume&limit=20&offset=0
```

### 仓库模式 (Repository Pattern)

```typescript
// 抽象数据访问逻辑
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
  }

  // 其他方法...
}
```

### 服务层模式 (Service Layer Pattern)

```typescript
// 业务逻辑与数据访问分离
class MarketService {
  constructor(private marketRepo: MarketRepository) {}

  async searchMarkets(query: string, limit: number = 10): Promise<Market[]> {
    // 业务逻辑
    const embedding = await generateEmbedding(query)
    const results = await this.vectorSearch(embedding, limit)

    // 获取完整数据
    const markets = await this.marketRepo.findByIds(results.map(r => r.id))

The rest: https://github.com/xu-xiang/everything-claude-code-zh/blob/HEAD/.agents/skills/backend-patterns/SKILL.md
