你将构建什么
本教程将带你从零构建一个 FastAPI 后端应用,采用双客户端架构:Profy(API Key) — 你的应用自己的 API Key,用于调用专家和 AI 模型ProfyApp(OAuth) — 用户的 OAuth Token,用于向袋袋上报计费事件
前置条件
袋袋开发者账号
已注册袋袋账号并在开发者后台创建 App,获取 Client ID、Client Secret 和 API Key
开发环境
Python 3.10+、pip、基础 FastAPI 和 async/await 经验
Step 1: 项目初始化
.env 文件存放凭证:
.env
Step 2: 初始化双客户端
config.py
两个客户端各司其职:
client(Profy)持有你的 API Key,用于 AI 调用;app_client(ProfyApp)持有 OAuth 凭证,用于用户授权和计费。Step 3: Token 存储
手动实现 Token 存储。生产环境使用数据库,这里用 dict 演示核心模式:token_store.py
Step 4: OAuth 登录流程
main.py
Step 5: 保护路由
通过 FastAPI 依赖注入自动加载并校验 Token:dependencies.py
Step 6: 上报计费事件
main.py (续)
on_refresh 回调在 Token 自动刷新时触发。因为 Profy 的 Refresh Token 是一次性的(rotation),必须在回调中持久化新 Token。Step 7: 调用 AI
使用Profy(API Key)客户端调用专家或 AI 模型——这与用户 OAuth Token 无关:
main.py (续)
Step 8: 错误处理中间件
main.py (续)
值得写进代码的契约限制
计费端点在服务端强校验这几项。提前在自己这边挡一道,免得线上才发现是 400:失败与对策
完整项目结构
requirements.txt:
requirements.txt
部署建议
多 Worker 部署
生产环境使用
gunicorn main:app -k uvicorn.workers.UvicornWorker -w 4。多 Worker 下 dict token store 不共享——必须用数据库或 Redis。环境变量管理
生产环境通过 Kubernetes Secret 或云平台环境变量注入凭证,不要使用
.env 文件。Cookie 需设置 secure=True。数据库迁移
用 SQLAlchemy + Alembic 管理 Token 表。生产环境不要用
create_all。反向代理
在 Nginx / Caddy 后面运行,处理 HTTPS 终止。确保
X-Forwarded-Proto 正确传递。下一步
Next.js 全栈集成
TypeScript 版本的双客户端全栈应用
按次计费实战
ProfyApp reportEvent 按次扣费
Token 管理最佳实践
并发刷新、安全存储、降级策略
SDK 完整指南
双语言 API 详解

