mcpField
B
backend-development

backend-development

github.com/moizibnyousaf开发1.2k869 次安装5 周前更新
代码仓库

关于 backend-development

Backend Development 是一项涵盖常见后端设计模式的技能,包括 REST API、数据库、身份验证、缓存、限流和可观测性,供设计或实现后端服务的开发者参考。

主要功能

  1. 01采用 REST API 约定
  2. 02规范响应与错误格式
  3. 03运用数据库模式和查询模式
  4. 04实现 JWT 身份验证中间件
  5. 05应用缓存旁路模式与限流
  6. 06规划日志、指标、追踪和健康检查

适用场景

  1. 01设计 REST 端点和响应格式
  2. 02规划数据库模式与分页查询
  3. 03添加身份验证、缓存或限流
  4. 04定义服务日志和健康检查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/moizibnyousaf/ai-agent-skills --skill backend-development

安装后在 Claude Code 中输入/backend-development确认已加载。

详细介绍

后端开发

API 设计

RESTful 约定
GET    /users          # List users
POST   /users          # Create user
GET    /users/:id      # Get user
PUT    /users/:id      # Update user (full)
PATCH  /users/:id      # Update user (partial)
DELETE /users/:id      # Delete user

GET    /users/:id/posts  # List user's posts
POST   /users/:id/posts  # Create post for user
响应格式
{
  "data": { ... },
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 100
  }
}
错误格式
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid input",
    "details": [
      { "field": "email", "message": "Invalid format" }
    ]
  }
}

数据库模式

模式设计
-- Use UUIDs for public IDs
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  public_id UUID DEFAULT gen_random_uuid() UNIQUE,
  email VARCHAR(255) UNIQUE NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Soft deletes
ALTER TABLE users ADD COLUMN deleted_at TIMESTAMPTZ;

-- Indexes
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_created ON users(created_at DESC);
查询模式
-- Pagination with cursor
SELECT * FROM posts
WHERE created_at < $cursor
ORDER BY created_at DESC
LIMIT 20;

-- Efficient counting
SELECT reltuples::bigint AS estimate
FROM pg_class WHERE relname = 'users';

身份验证

JWT 模式
interface TokenPayload {
  sub: string;      // User ID
  iat: number;      // Issued at
  exp: number;      // Expiration
  scope: string[];  // Permissions
}

function verifyToken(token: string): TokenPayload {
  return jwt.verify(token, SECRET) as TokenPayload;
}
中间件
async function authenticate(req: Request, res: Response, next: Next) {
  const token = req.headers.authorization?.replace('Bearer ', '');
  if (!token) {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  try {
    req.user = verifyToken(token);
    next();
  } catch {
    res.status(401).json({ error: 'Invalid token' });
  }
}

缓存策略

// Cache-aside pattern
async function getUser(id: string): Promise<User> {
  const cached = await redis.get(`user:${id}`);
  if (cached) return JSON.parse(cached);

  const user = await db.users.findById(id);
  await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
  return user;
}

// Cache invalidation
async function updateUser(id: string, data: Partial<User>) {
  await db.users.update(id, data);
  await redis.del(`user:${id}`);
}

速率限制

const limiter = rateLimit({
  windowMs: 60 * 1000,  // 1 minute
  max: 100,             // 100 requests per window
  keyGenerator: (req) => req.ip,
  handler: (req, res) => {
    res.status(429).json({ error: 'Too many requests' });
  }
});

可观测性

  • 日志记录:包含请求 ID 的结构化 JSON 日志
  • 指标:请求延迟、错误率、队列深度
  • 追踪:使用关联 ID 进行分布式追踪
  • 健康检查:/health 和 /ready 端点

评论

支持 Markdown