现象
app/api/resolve.py 里的 URL_FALLBACK_PLATFORMS(含 kuaishou、instagram)本意是:
当 video_id 提取失败时放行,让 provider 链用原始 URL 兜底。
但这条路径在生产中永远走不到。
机制
兜底分支要求 url_parser.parse_url() 返回 (platform, None)。而现有 parse_url 在 ID 提取
失败时,对这两个平台返回的是 (None, None)——平台名也一起丢了,兜底分支的条件匹配不上,
请求直接落到 400。
为什么测试没发现
现有相关测试用 monkeypatch 把 parse_url 替换掉、直接喂 (platform, None) 进去,
绕过了真实的 parse_url。所以测试断言的是"兜底分支拿到正确入参后会怎样",
而不是"真实链路能不能产生这个入参"。测试绿,功能不通。
这是一个典型的假绿:桩替换点选在了被测缺陷的上游。
发现经过
接入微信视频号(PR #7)时发现。视频号需要同样的兜底能力,实现方核对现状时发现约定对不上,
在报告里显式提出。视频号本身已通过让 parse_url 返回 (wechat_channels, None) 走通,
未改动快手/Instagram 的行为,所以本 issue 描述的是存量缺陷,不是 PR #7 引入的。
修复方向(供参考,未拍板)
- 让
parse_url 对 URL_FALLBACK_PLATFORMS 内的平台在 ID 提取失败时保留平台名,
返回 (platform, None)——与视频号现在的做法一致。
- 把相关测试从 monkeypatch
parse_url 改成走真实 parse_url,用真实的短链/无 ID URL 作输入。
这一步是关键:不改测试的话,同样的假绿会再来一次。
- 回归验证:
parse_url 是所有平台共用入口,改动需确认其余 6 个平台的识别结果零变化。
影响面
快手与 Instagram 在「短链展开失败」或「ID 提取失败」时,本应降级到按 URL 解析,
实际直接返回 400。影响程度取决于这两个平台的 URL 形态有多少落进提取失败分支。
现象
app/api/resolve.py里的URL_FALLBACK_PLATFORMS(含kuaishou、instagram)本意是:当 video_id 提取失败时放行,让 provider 链用原始 URL 兜底。
但这条路径在生产中永远走不到。
机制
兜底分支要求
url_parser.parse_url()返回(platform, None)。而现有parse_url在 ID 提取失败时,对这两个平台返回的是
(None, None)——平台名也一起丢了,兜底分支的条件匹配不上,请求直接落到 400。
为什么测试没发现
现有相关测试用
monkeypatch把parse_url替换掉、直接喂(platform, None)进去,绕过了真实的
parse_url。所以测试断言的是"兜底分支拿到正确入参后会怎样",而不是"真实链路能不能产生这个入参"。测试绿,功能不通。
这是一个典型的假绿:桩替换点选在了被测缺陷的上游。
发现经过
接入微信视频号(PR #7)时发现。视频号需要同样的兜底能力,实现方核对现状时发现约定对不上,
在报告里显式提出。视频号本身已通过让
parse_url返回(wechat_channels, None)走通,未改动快手/Instagram 的行为,所以本 issue 描述的是存量缺陷,不是 PR #7 引入的。
修复方向(供参考,未拍板)
parse_url对URL_FALLBACK_PLATFORMS内的平台在 ID 提取失败时保留平台名,返回
(platform, None)——与视频号现在的做法一致。parse_url改成走真实parse_url,用真实的短链/无 ID URL 作输入。这一步是关键:不改测试的话,同样的假绿会再来一次。
parse_url是所有平台共用入口,改动需确认其余 6 个平台的识别结果零变化。影响面
快手与 Instagram 在「短链展开失败」或「ID 提取失败」时,本应降级到按 URL 解析,
实际直接返回 400。影响程度取决于这两个平台的 URL 形态有多少落进提取失败分支。