public-apis 列表更新滞后(大量接口已死或偷偷转付费),用 Astro + Cloudflare Workers + D1 + Pages 搭建了 FreeAPI.watch。每小时轮询 77 个免费公共 API 的可用性和响应时间,每日自动重建静态站点。核心架构与踩坑要点:
- 三层分离:Pinger Worker(每小时 cron 检查并写入 D1)→ Builder Worker(每日 cron 汇总数据并暴露 JSON 快照)→ Astro 静态站(构建时拉取快照,生成 142 页纯 HTML)。
- Bug 一:fetch 的
this 绑定丢失。将 fetch 作为依赖注入函数存储时,在 Cloudflare Workers 的 V8 隔离环境下会因品牌检查失败导致立即抛出 TypeError,response_ms 始终为 0。修复:fetch.bind(globalThis)。- Bug 二:50 子请求硬上限。免费版 Workers 单次调用最多发起 50 个 fetch 子请求,77 个 API 直接溢出。当前仅能成功检查前 50 个,后续 21 个静默失败。计划拆分 cron 为两个时段(0 分和 5 分,各 40 个)或升级付费版($5/月)解决。
- Bug 三:Pages 部署钩子不适用于直接上传。项目通过
wrangler pages deploy dist/ 部署(无 git 关联),无法使用 Pages 部署钩子。改用 GitHub Actions 每日 02:15 UTC 触发构建并重新部署,需手动设置 CLOUDFLARE_ACCOUNT_ID 避免权限查找。所有服务均在免费层内运行(Workers 请求 1,700/天、D1 存储 80KB、Actions 90 分钟/月),唯一瓶颈是单次调用子请求数。
🔗 项目地址:原文链接
#开发者 #工具
📢 频道:@DevToolboxHub