跳到主要内容
弗美科技
技术分享

Node.js 重写老 PHP 接口,兼容 3 个旧参数

一个跑了七年的 PHP 报表接口要迁到 Node.js,麻烦不在重写,在没人知道谁在调它。翻半年 Nginx 日志,找出 3 个带旧参数的调用方,其中 1 个是客户 Excel 里的宏。新接口留了兼容层:旧参数照收、内部转新字段、响应结构不变,还把调用来源记进日志。

2024年1月18日接口迁移兼容日志

一套老报表接口,PHP 5.6 写的,跑了七年。要迁到 Node.js,代码本身两三天就译完了,真正花时间的是「别把谁弄断」。

先查谁在调

没人说得清这个接口被哪些地方用。文档停在 2019 年,列了 2 个调用方,明显不全。

办法很笨:拉半年 Nginx 的 access log,按这个 path 过滤,把 query string 拆开统计。结果找出 3 类带旧参数的请求:

  • 一个内部的定时任务,还在传 type=1 这种老枚举。
  • 一个客户自己做的看板页面,参数名拼错了但一直能用,PHP 那边做了容错。
  • 最意外的一个,来自一台办公电脑的 Excel 宏,用 Web 查询拉数,User-Agent 是 Office 那串。

第三类要是漏了,上线第二天那边报表就空了,而且没人会想到去查宏。

兼容层怎么留

新接口参数重新设计过,但外层留了一个适配:旧参数照收,内部映射成新字段;type=1 这种老枚举翻译成新枚举;拼错的那个参数名也留着,标了 deprecated。

响应 JSON 的字段名和层级一点没改。改响应比改参数危险得多,下游多半直接按下标取值。

另外在每个请求里记一行日志:原始参数、识别成哪类调用方、走的兼容分支没有。跑了两个月,我们照着这张表一个个去联系,把定时任务和看板迁到新参数。Excel 宏那个没动,客户说那台电脑还要用两年。

灰度那段

两套并行了 3 周,Nginx 按 cookie 分流,跟之前灰度一个套路。旧接口留了 7 天才关,关之前先看日志确认没有请求再进来。

有个小坑:Node.js 那边默认把数字精度按 JS 处理,报表里有个 17 位的单号,返回给 Excel 时末尾变了 0。发现后改成字符串返回,才对上。这个 PHP 时代不会遇到,是换语言带来的。

现在

兼容层还在,代码里一个 switch,不到 30 行,注释写着「别删,Excel 还在用」。等那台电脑退役再说。

迁移这事,写代码是最短的一段。

商务咨询 · 免费初步沟通

需要针对你的场景给个建议?

把业务背景和当前系统情况告诉我们,我们会给出可执行的思路。

在线留言

周一至周五 9:00–18:00 · 工作日 9:00–18:00 响应,留言会在一个工作日内回复。

商务微信
商务微信二维码

扫一扫,加商务微信咨询服务与方案报价

或填写需求表单