Cloudflare Workers + D1 + RevenueCat

把第三方 API 放到 Cloudflare 后面,而不是塞进客户端。

这是一个给移动 App 和轻量 Web 产品用的 API Gateway。 它负责代理第三方请求、隐藏 key、做设备鉴权、记录配额、承接订阅状态, 让客户端只需要发请求,不需要再碰后端密钥。

  • Worker 入口: `GET /health`, `GET /api/usage`, `ALL /api/proxy/:service/*`
  • D1 存设备、配额、用量日志、waitlist
  • 支持 RevenueCat webhook 同步订阅状态
LIVE FLOW Edge-first
Client Flutter / iOS App `X-Device-ID` + HTTPS
Gateway Cloudflare Worker 鉴权 / 限流 / quota / proxy
D1 device, usage, waitlist
RevenueCat purchase / renewal / expiration
Service A hidden API key
Service B proxy target

Architecture

不是“大而全后端”,而是一层足够薄、但足够稳的 Cloudflare 网关。

01

密钥只留在后端

客户端只访问 Worker,第三方 API key 通过 Wrangler secrets 保存,不暴露在 App 包里。

02

设备鉴权 + 自动注册

第一次请求就能自动登记设备、发免费额度,不需要额外的注册接口。

03

配额模型内建

免费 10 次,Pro 300 次/月,支持月底重置、过期回退和服务级扣减。

04

订阅状态由 Webhook 驱动

RevenueCat 事件直连 Worker,INITIAL_PURCHASE、RENEWAL、EXPIRATION 都有明确状态变更。

Core Endpoints

接口已经按“客户端最常碰到的动作”分层。

目标不是做“万能 BFF”,而是让移动端只对一套稳定入口说话。

GET /health

健康检查,用来验证 Worker 在线和时间戳输出。

GET /api/usage

查询剩余额度、订阅状态、到期时间和最近统计。

ALL /api/proxy/:service/*

统一代理第三方 API,请求路径和方法原样透传,成功调用按次扣减。

POST /webhook/iap/webhook

接 RevenueCat 订阅事件,把 purchase / renewal / expiration 写进 D1。

Use Cases

适合这些“客户端需要第三方能力,但不该直接暴露 key”的产品。

尤其适合 API 聚合、按次计费、低成本验证和 iOS/Flutter 项目。

AI 功能代理

把 OpenAI、图像识别、ISBN、搜索等外部服务统一放到 Worker 后面,按设备做额度控制。

订阅制 App

客户端购买由 RevenueCat 处理,Worker 只负责把订阅状态落库并约束请求额度。

灰度验证页

前端宣传页、waitlist 和正式 API 可以放在同一套 Cloudflare 体系里,部署和域名都比较轻。

Preview Access

先收需求,再决定是继续做成内部网关,还是抽成独立产品。

如果你也在做 Flutter、iOS 或小型 Web App,需要一层 “Cloudflare 上的 API key 防火墙 + 配额层”,可以先留邮箱。

没配置 `PUBLIC_WAITLIST_ENDPOINT` 时,当前表单会以本地预览模式提交。