🚀 告别后端挂机焦虑:一键切换接口环境的 API 代理转发工具

0 阅读4分钟

摘要:  当测试环境挂了,你是选择刷手机等待修复,还是搭建复杂的 Mock 服务?本文将介绍一款我开发的 Chrome 插件,它能像“魔法”一样,让你在不修改代码、不重新构建的情况下,将前端页面的请求瞬间转发到任意环境(如生产环境),构建一条高效的开发“逃生通道”。


🚨 痛点:当测试环境挂了

作为一名前端开发者,你是否经历过这样的绝望时刻?

  • 场景 A:你正在全神贯注地开发新功能,突然测试环境的后端接口报错 500。你只能无奈地等待后端同事修复,宝贵的时间在等待中流逝。
  • 场景 B:你需要验证一个线上问题,但本地环境无法复现,必须依赖测试环境。然而测试环境的数据结构与线上不一致,导致你无法准确调试。

单个接口 Mock 很容易,但如果整个环境都崩了,或者你需要整体迁移请求,传统的 Mock 方案(如拦截单个 URL)就显得力不从心了。

🚀 解决方案:API 代理转发工具

为了解决这个问题,我开发了一款名为 API Proxy 的 Chrome 插件。

它的核心理念非常简单粗暴:我不改代码,我只改流量。

这款插件允许你拦截网页发出的所有 API 请求,并根据正则表达式规则,将它们转发到另一个服务器。你可以把它理解为浏览器端的“Nginx 反向代理”,但它更轻量、更灵活,且无需重启服务,刷新页面即可生效。

image.png

💡 核心功能

这款插件不仅仅是一个简单的 URL 替换工具,它具备以下强大的功能:

  1. 多规则转发:支持配置多个转发规则,每个规则独立开关,互不干扰。
  2. 正则表达式匹配:使用正则表达式匹配源 URL,并支持在目标 URL 中使用 $1$2 等捕获组,实现复杂的路由映射。
  3. 自动 Cookie 管理:这是最核心的难点。插件能自动获取目标服务器的 Cookie(例如生产环境的登录态),并注入到转发请求中,解决跨域认证问题
  4. 自定义 Headers:支持添加任意 HTTP Headers,满足鉴权或调试需求。
  5. 完整的日志系统:所有被拦截和转发的请求都会记录在案,支持搜索和导出,方便排查问题。

🛠️ 技术架构与实现原理

这款插件基于 Chrome Manifest V3 开发,为了实现对 fetch 和 XHR 请求的拦截,我们采用了经典的“内容脚本注入”方案。

1. 数据流架构

整个插件的数据流向如下:

2. 核心拦截技术

为了不破坏页面原有的逻辑,我们需要在页面加载的第一时间注入脚本。核心代码逻辑如下(简化版):

// injected.js
// 重写 window.fetch 和 XMLHttpRequest.prototype.send
// 在请求发出前,通过 chrome.runtime.sendMessage 询问 background 是否需要转发
// 如果需要,取消原生请求,改由 background 发起代理请求

3. Cookie 跨域难题

由于浏览器的安全策略,测试环境(test.example.com)无法直接读取生产环境(prod.example.com)的 Cookie。

解决方案
利用 Chrome 插件的 chrome.cookies 权限。插件后台(Service Worker)拥有跨域读取 Cookie 的权限。当规则配置为“自动获取 Cookie”时,插件会从目标域名读取 Cookie,并将其作为请求头附加到代理请求中。

🚀 快速上手指南

1. 安装

前往 chrome://extensions/,开启开发者模式,加载已解压的扩展程序,选择插件目录即可。

2. 配置你的第一条规则

假设你的测试环境崩溃了,你想把请求全部打到生产环境:

  • 规则名称:测试 -> 生产
  • 源 URL 模式https://test.example.com/(.*)
  • 目标 URLhttps://prod.example.com/$1
  • Cookie 设置:开启“自动获取 Cookie”

image.png

保存并刷新页面,见证奇迹的时刻:你的前端页面现在正在使用生产环境的数据跑起来了!

📊 功能截图

📝 结语

API Proxy 插件虽然小巧,但它在关键时刻能极大地提升开发效率。它不仅解决了“环境挂了”的问题,还适用于本地开发调试线上数据、跨域请求代理等多种场景。

注意:请仅在开发和测试环境中使用此工具。由于它涉及 Cookie 和数据转发,请勿用于非法或未经授权的用途。

GitCode 地址gitcode.com/liuguolin/D…


如果你觉得这个工具对你有帮助,欢迎 Star 支持!也欢迎提交 Issue 或 PR 帮助我们完善它。