API 接口 Mock 联调引擎(专业版)
输入
| 字段 | 必填 | 说明 |
|---|---|---|
| schema | 是 | {{字段:类型}} 字典 |
| pattern / actual | 否 | 路由模板与实际路径 |
| scenario | 否 | normal/slow/ratelimit/notfound/error |
输出
gen_mock_body(schema) 确定性 Mock 对象;match_route 返回(匹配,参数);mock_status_delay 返回(状态码,延迟ms)
硬性规则
- Mock 值固定占位,不编造真实业务数据。
- 场景状态码固定:normal200/slow200延迟2000/ratelimit429/notfound404/error500。
- 未知场景统一回 500,不静默当成功。
示例
gen_mock_body({{"name":"string","age":"integer"}}) → {{"name":"示例文本","age":1}}
match_route("/users/{id}","/users/123") → (True,{{"id":"123"}})
mock_status_delay("ratelimit") → (429,0)
Python 引擎(可独立运行)
# -*- coding: utf-8 -*-
import re
def gen_mock_value(ftype):
table = {"string":"示例文本","integer":1,"number":1.0,"boolean":True,
"array":[],"object":{},"email":"user@example.com","datetime":"2026-01-01T00:00:00Z"}
return table.get(ftype, "示例文本")
def gen_mock_body(schema):
"""schema: {字段名: 类型} -> mock JSON 对象"""
return {k: gen_mock_value(v) for k, v in schema.items()}
def match_route(pattern, actual):
"""路由模板 /users/{id} 匹配实际路径,返回(是否匹配, 参数字典)"""
pseg = [s for s in pattern.strip("/").split("/") if s]
aseg = [s for s in actual.strip("/").split("/") if s]
if len(pseg) != len(aseg):
return False, {}
params = {}
for p, a in zip(pseg, aseg):
m = re.fullmatch(r"\{([^}]+)\}", p)
if m:
params[m.group(1)] = a
elif p != a:
return False, {}
return True, params
SCENARIO = {"normal":(200,0),"slow":(200,2000),"ratelimit":(429,0),
"notfound":(404,0),"error":(500,0)}
def mock_status_delay(scenario):
return SCENARIO.get(scenario, (500,0))