api-mockinglisted
Install: claude install-skill afine907/skills
# API Mock — API Mock 技能
设计 Mock 服务,支持前后端并行开发和测试场景模拟。
## Goal
设计和实现 API Mock 服务,支持前后端并行开发、测试环境模拟、延迟/错误注入
## Trigger
- 用户要求"Mock API"、"模拟接口"
- 后端接口未就绪,前端需要开发
- 测试需要模拟各种响应场景
## Mock 方案对比
| 方案 | 适用场景 | 优势 | 劣势 |
|------|----------|------|------|
| Mock Server | 前端独立开发 | 真实 HTTP 请求 | 需要维护服务 |
| 代码级 Mock | 单元测试 | 灵活、快速 | 不测试网络层 |
| API 网关 Mock | 微服务开发 | 无需改代码 | 配置复杂 |
| 录制回放 | 回归测试 | 真实数据 | 数据可能过期 |
## Mock Server 实现
### Python + FastAPI
```python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional, List
import random
import time
app = FastAPI(title="Mock Server")
# Mock 数据
USERS_DB = [
{"id": "1", "name": "张三", "email": "zhangsan@example.com"},
{"id": "2", "name": "李四", "email": "lisi@example.com"},
{"id": "3", "name": "王五", "email": "wangwu@example.com"},
]
# 配置
MOCK_DELAY = 0.1 # 模拟延迟
ERROR_RATE = 0.05 # 错误率
@app.middleware("http")
async def mock_delay(request, call_next):
"""模拟网络延迟"""
await asyncio.sleep(MOCK_DELAY + random.uniform(0, 0.05))
# 随机错误注入
if random.random() < ERROR_RATE:
return JSONResponse(
status_code=500,
content={"error": "Internal Server Error"}
)
return await call_next(request)
@app.get("/api/v1/users")
async def list_users(page: int = 1, page_size: int = 10):
"""获取用户列表"""
start = (page - 1) * page_size
end = start + page_size