# mock-server

基于 Rust/Axum 的配置驱动型 Mock 服务，支持 YAML 配置、请求匹配、热重载、延迟响应、大文件流式返回等特性。

## 特性

- **配置驱动**：YAML 定义 API 行为，无需修改代码
- **热重载**：`mocks/*.yaml` 变更自动生效，无需重启服务
- **高性能**：基于 Rust 异步运行时，路径首段哈希索引 O(1) 匹配
- **低内存**：大响应体支持 `file://` 协议从磁盘流式读取
- **请求匹配**：支持 method、path、headers、query_params、body 多维度匹配

## 快速开始

### 1. 安装依赖

确保已安装 Rust 工具链：

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

### 2. 构建与运行

```bash
cargo build              # 构建项目
cargo run                # 启动服务 http://127.0.0.1:8080
cargo test               # 运行所有测试
cargo test <pattern>     # 运行匹配的测试（如 cargo test router）
cargo clippy             # 代码检查
cargo fmt                # 格式化代码
```

## 文件结构

```
src/
├── main.rs      # 入口，热重载监听，Axum 路由配置
├── config.rs    # 数据结构定义（MockRule, RequestMatcher 等）
├── loader.rs    # YAML 解析，目录扫描
├── router.rs    # 路径首段索引，匹配逻辑
└── handler.rs   # 统一请求处理器，文件流式响应

tests/           # 集成测试（每个模块一个测试文件）
mocks/           # YAML Mock 配置文件
```

## Mock 配置

详细配置规范请参考 [.claude/rules/mock-spec.md](.claude/rules/mock-spec.md)

## 未来计划

### 1. 动态参数与模板响应

支持路径参数捕获（如 `/api/users/{id}`）和响应模板，可在响应中引用请求参数：

```yaml
# 请求: GET /api/users/123
# 响应: { "id": "123", "name": "User 123" }
```

### 2. HTTPS 支持

内置 TLS/SSL 支持，提供安全的 HTTPS 服务。

### 3. 可视化管理界面

- **TUI（终端界面）**：基于 Ratatui 的交互式终端管理
- **GUI（图形界面）**：Web Dashboard 或桌面应用，可视化管理 Mock 规则

> 此功能需要深入讨论，欢迎提出建议和需求

## 许可证

MIT
