TL;DR: 基于用量的计费(计量计费)根据 API 消耗量向客户收费——包括请求次数、存储空间、计算时长或用户数。Stripe 的计量计费集成与 TanStack Start 让这一模式轻松落地。本文涵盖计量架构、定价模型(按请求计费、阶梯计费、超量计费)以及开发者门户设计。
简介
基于用量的计费模式使收入与客户获得的价值保持一致。轻度用户付费少,重度用户付费多。这一模式是 API 产品的标准做法(Twilio、Stripe、OpenAI),也越来越被 SaaS 平台所采纳。
计量架构
// API 用量计量中间件
export const meterApiUsage = defineMiddleware({
before: async ({ request, context }) => {
const apiKey = request.headers.get('x-api-key')
const user = await getUserByApiKey(apiKey)
// 记录用量事件
context.metering = {
userId: user.id,
endpoint: request.url,
timestamp: Date.now(),
}
},
after: async ({ context }) => {
// 在 D1 中增加用量计数器
await db.insertInto('api_usage').values({
user_id: context.metering.userId,
endpoint: context.metering.endpoint,
timestamp: context.metering.timestamp,
}).execute()
},
})
定价模型
| 模型 | 示例 | 最适合 |
|---|---|---|
| 按请求计费 | 每个 API 调用 $0.01 | 简单 API |
| 阶梯计费 | 前 1 万次免费,此后 $0.005 | 高频 API |
| 超量计费 | $29/月含 5 万次,超出后 $0.001/次 | SaaS + API |
| 按单位计费 | 每 GB 存储 $10 | 存储产品 |
| 并发计费 | 每个席位 $50 | 协作 API |
Stripe 计量计费
import Stripe from 'stripe'
// 向 Stripe 上报用量
await stripe.subscriptionItems.createUsageRecord(
subscriptionItemId,
{
quantity: apiCalls,
timestamp: 'now',
action: 'increment',
}
)
结语
基于用量的计费将定价与价值对齐。计量基础设施——追踪用量、向 Stripe 上报、在仪表板中展示——借助 TanStack Start 服务端函数和 Stripe 计量计费 API 可以轻松实现。完整的计费策略可参考我们的 Stripe 计费指南 和 SaaS 定价层级策略。