AI 换装后端只有三个接口,但把它们设计对,需要想清楚两件事:任务状态怎么流转、长时间任务怎么异步。
接口与状态机
POST /api/upload # 上传人像/服装图 → 返回图片 URL
POST /api/tryon # 提交换装任务 → 返回 task_id
GET /api/query?id={task_id} # 轮询任务状态
status: pending → processing → done / failed
模型推理可能耗时几十秒,同步等待会把请求超时打满。所以 tryon 只负责"登记任务",真正调用模型的动作放到后台执行,前端用 query 每 2-3 秒轮询一次,直到状态变为 done 或 failed。
demo 阶段:内存字典
最开始任务表就是一个 Python 字典,task_id → {status, result_url},简单直接、零依赖,够 demo 用。
生产化:迁移到 Redis
内存态有几个硬伤:进程重启任务全丢、多实例无法共享、无法做过期清理。迁移到 Redis 只改一层:
- 引入
redis-py,连接串从环境变量读取 - 任务写入改为
SET task:{id} {json},并设置EXPIRE 600防止任务堆积 - 查询改为
GET task:{id},接口签名不变,前端完全无感
小结:先跑通再优化。接口设计只要守住"提交与执行分离 + 状态可查询",从 demo 到生产只需要替换存储实现,而不是重写接口。