返回首页
后端 · 设计

一个 AI 换装应用的接口设计复盘

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 秒轮询一次,直到状态变为 donefailed

demo 阶段:内存字典

最开始任务表就是一个 Python 字典,task_id → {status, result_url},简单直接、零依赖,够 demo 用。

生产化:迁移到 Redis

内存态有几个硬伤:进程重启任务全丢、多实例无法共享、无法做过期清理。迁移到 Redis 只改一层:

  • 引入 redis-py,连接串从环境变量读取
  • 任务写入改为 SET task:{id} {json},并设置 EXPIRE 600 防止任务堆积
  • 查询改为 GET task:{id},接口签名不变,前端完全无感

小结:先跑通再优化。接口设计只要守住"提交与执行分离 + 状态可查询",从 demo 到生产只需要替换存储实现,而不是重写接口。