想做「清空回收站」接口,定义了 `DELETE /api/trash/empty`,结果一直 404。排查了半天才发现——FastAPI 把 `/trash/empty` 里的 `empty` 当成了 `{file_id}` 路径参数,去数据库查 id 为 "empty" 的文件,当然找不到。
**怎么修的**:把 `DELETE /api/trash/empty` 改成 `POST /api/trash/empty`。HTTP 方法不同,就不会被那条 DELETE 路由捕获了。
**深层原因**:FastAPI(和大多数路由框架)按注册顺序匹配,动态路径 `{file_id}` 会吃掉所有符合模式的路径——包括你以为是「静态」的 `/empty`。
**教训**:设计 REST API 时,如果有 `/{id}` 动态路由,同级别的「特殊操作」要么换方法(GET→POST),要么加前缀(`/batch-empty`),否则路由一定会打架。