联调说明-跨插件批量QuickMock
更新时间:2026-07-14;使用模型:Codex(GPT-5);用户:Jsmond2016
当前实现说明
- 本地已存在的接口优先复用,不读取缓存或请求 Apifox。
- 缺失接口优先读取 IndexedDB 中有效期为 24 小时的 Parsed API 缓存。
- 首次冷缓存会等待 Apifox 拉取与解析完成,再创建模块,保证接口名称、方法、链接、权限点和标签完整。
- 相同 Apifox 配置的并发请求会复用同一个进行中的请求,避免重复拉取。
- IndexedDB 失败时使用本次解析结果继续处理,不中断 Quick Mock。
- 新建的外部模块标记为
external,Apifox tag 刷新不会覆盖该模块。
详细缓存设计见Quick Mock 持久缓存。
背景
当前插件已支持被其他 Chrome 扩展通过外部消息方式触发"批量 Quick Mock"流程。
目标效果:
- B 插件勾选多个异常接口
- B 插件按接口 URL 去重后发送到当前插件
- 当前插件按 URL 列表自动补全接口信息
- 当前插件生成一批 mock 配置并打开新的 options Tab
- 当前插件向 B 插件返回统一结果提示
接口协议
请求消息
B 插件通过 chrome.runtime.sendMessage 向当前插件发送:
ts
type ExternalBatchQuickMockRequest = {
type: "BATCH_QUICK_MOCK";
requestId: string;
urls: string[];
};响应消息
ts
type ExternalBatchQuickMockResponse = {
success: boolean;
jobId?: string;
status: "success" | "partial_success" | "failed";
total: number;
successCount: number;
failCount: number;
message: string;
};当前插件处理规则
URL 处理
- 会对 URL 做二次去重
- 若传入完整地址,会只取 pathname
- 去掉 query 和 hash
- 补齐前导
/
示例:
https://a.com/api/user?id=1->/api/userapi/user->/api/user/api/user/->/api/user
信息补全优先级
- 优先匹配当前插件本地已存在的接口配置
- 若未命中本地配置,则尝试从当前
apifoxUrl拉取接口信息补全 - 若 Apifox 中也不存在,则仍按基础信息创建
落库模块
插件将本次批量结果写入固定模块 quick.mock.external。每次批量任务会覆盖该模块中的旧列表。
B 插件接入示例
ts
const CURRENT_PLUGIN_ID = "替换为当前插件ID";
async function sendBatchQuickMock(urls: string[]) {
const dedupedUrls = [...new Set(urls)];
const response = await chrome.runtime.sendMessage(CURRENT_PLUGIN_ID, {
type: "BATCH_QUICK_MOCK",
requestId: String(Date.now()),
urls: dedupedUrls,
});
if (response?.status === "success") {
chrome.notifications?.create({
type: "basic",
iconUrl: "icon.png",
title: "Quick Mock",
message: "操作成功",
});
return;
}
if (response?.status === "failed") {
chrome.notifications?.create({
type: "basic",
iconUrl: "icon.png",
title: "Quick Mock",
message: "操作失败",
});
return;
}
chrome.notifications?.create({
type: "basic",
iconUrl: "icon.png",
title: "Quick Mock",
message: "部分操作成功,请前往 mock 列表查看",
});
}新 Tab 展示行为
当前插件完成处理后会自动打开新的 options Tab,并:
- 自动切换到
quick.mock.external模块 - 自动勾选本次成功导入的接口
- 自动高亮第一条成功接口
- 顶部展示批量处理摘要
联调步骤
- 在当前插件中先完成一次 Apifox 同步,保证
apifoxUrl和mockPrefix已配置 - 重新构建并安装当前插件
- 在 B 插件中填入当前插件的扩展 ID
- 选择多个接口 URL,调用
BATCH_QUICK_MOCK - 观察当前插件是否自动打开新的 options Tab
- 核对
quick.mock.external模块中的接口列表是否符合预期
注意事项
- 联调阶段
externally_connectable配置为["*"],上线建议改为白名单 - 若本地已有接口配置则优先复用本地字段,Apifox 缺失不阻断创建流程
quick.mock.external模块只承载最近一次结果,不保留历史批次
