Lightweight HTTP mock server — directory structure as URL paths
Project description
mockpath
轻量级 HTTP Mock 服务器。通过 YAML 配置 + JSON 文件定义模拟接口,目录结构即 URL 路径。
特性
- 目录结构自动映射为 URL 路径
- YAML 定义接口配置,JSON 定义请求/响应体
- 支持 query 参数匹配(子集匹配,请求中的额外参数不影响匹配)
- 支持请求体匹配(深度相等比较)
- 请求体和响应体均支持内联、文件引用、约定命名三种方式
--reload模式自动监听文件变更并热重载- 未知路径返回 404,方法不匹配返回 405
安装
pip install mockpath
或使用 uv:
uv tool install mockpath
使用
mockpath [-p PORT] [-d DIR] [--reload]
| 参数 | 说明 | 默认值 |
|---|---|---|
-p, --port |
监听端口 | 8000 |
-d, --dir |
配置目录 | ./api |
--reload |
监听文件变更,自动重载配置 | 关闭 |
--version |
显示版本号 | |
--help |
显示帮助信息 |
文件命名规则
api/ # 配置根目录(通过 -d 指定)
v1/
users/
list.get.yaml # GET /v1/users/list 的配置
list.get.resp.json # 默认响应
list.get.resp.1.json # 匹配规则 #1 的响应
profile.post.yaml # POST /v1/users/profile 的配置
profile.post.resp.json # 默认响应
profile.post.req.1.json # 匹配规则 #1 的请求体
profile.post.resp.1.json # 匹配规则 #1 的响应
命名模式:<端点名>.<HTTP方法>.yaml
YAML 配置格式
基础接口(无匹配规则)
# profile.get.yaml
status: 200
响应体来自 profile.get.resp.json。
Query 参数匹配
# list.get.yaml
status: 200
matches:
- params:
page: "1"
limit: "10"
- params:
page: "2"
response: # 内联响应
users: []
total: 0
匹配逻辑:请求的 query 参数是配置参数的超集即可匹配(子集匹配)。
请求体匹配(POST/PUT/PATCH)
# profile.post.yaml
status: 201
matches:
- request: # 内联请求体
name: "Bob"
response_file: resp.1.json
- request_file: req.2.json # 引用外部请求体文件
response:
id: 4
name: "Alice"
- status: 200 # 约定命名:请求体来自 profile.post.req.3.json
请求体的三种指定方式
每条匹配规则的请求体按以下优先级确定:
request— YAML 中的内联 JSON 请求体request_file— 引用外部文件(相对于 YAML 文件的路径)- 约定命名 — 自动查找
<端点名>.<方法>.req.N.json
响应的三种指定方式
每条匹配规则的响应按以下优先级确定:
response— YAML 中的内联 JSON 响应response_file— 引用外部文件(相对于 YAML 文件的路径)- 约定命名 — 自动查找
<端点名>.<方法>.resp.N.json
匹配流程
- 按
matches列表顺序逐一尝试 - 第一个匹配成功的规则生效(first match wins)
- 无匹配 → 返回默认响应
示例
# 启动服务器
mockpath -p 3000
# Query 参数匹配
curl "http://localhost:3000/v1/users/list?page=1"
# → [{"id": 1, "name": "Alice"}]
curl "http://localhost:3000/v1/users/list?page=2"
# → {"users": [], "total": 0}
# 请求体匹配
curl -X POST http://localhost:3000/v1/users/profile \
-H "Content-Type: application/json" \
-d '{"name": "Bob"}'
# → {"id": 3, "name": "Bob"}
# 无匹配时返回默认响应
curl "http://localhost:3000/v1/users/list"
# → [{"id": 1, "name": "Alice"}]
依赖
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
mockpath-0.1.2.tar.gz
(12.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mockpath-0.1.2.tar.gz.
File metadata
- Download URL: mockpath-0.1.2.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcd07cec7f0893b7ddd2e9881d76c9f6ed5cebc2d6144276b60fb4df04658371
|
|
| MD5 |
6bcf0fa242c6ac55c20d477f41bb78c7
|
|
| BLAKE2b-256 |
df72fdf902e4936227b5214773ca552c977e3df5ec90644b3c81183b25179ef7
|
File details
Details for the file mockpath-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mockpath-0.1.2-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a881e7e20b1fb34a9f631084b4dc1b34483706293c96a37b24bfe5439b75ce6
|
|
| MD5 |
03f33079da9f6a2f33f54cdcce659950
|
|
| BLAKE2b-256 |
2b4b77a8c7022a08bd4e49476e7cfa940a80e63aa3c446e798f536a76c2164f4
|