Fitten Code是用FastAPI实现Express风格API的实操路径:初始化项目、定义带类型校验的路由(如/user/{user_id}自动转int并422拦截非法输入)、注入async中间件、自动生成Swagger/ReDoc交互文档。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要在10分钟内交付一个带交互式文档的API服务,前端同事等着联调,后端又不想手写Swagger YAML——Fitten Code不是AI代码生成器,而是指用FastAPI+Express双框架思维快速落地接口的实操路径。
初始化FastAPI项目骨架
创建项目目录并激活虚拟环境,确保Python版本≥3.8:
mkdir fastapi-express-demo && cd fastapi-express-demo
python3 -m venv .venv && source .venv/bin/activate
安装核心依赖:
pip install fastapi "uvicorn[standard]" -i https://pypi.tuna.tsinghua.edu.cn/simple
新建main.py,写入最简启动代码:
from fastapi import FastAPI
app = FastAPI(title="Fitten API")
@app.get("/")
async def root():
return {"message": "Hello from FastAPI"}
这一步操作起来很简单,直接把文件保存后就能跑起来。但注意:如果没加async关键字,后续接入Express风格中间件时会阻塞事件循环。
定义类Express路由与参数解析
FastAPI的@app.get("/users/{id}")语法就是Express中app.get('/users/:id')的Python映射,但类型校验是自动的:
① 在main.py中添加路径参数接口:
@app.get("/users/{user_id}")
async def get_user(user_id: int, name: str = "anonymous"): return {"id": user_id, "name": name}
② 启动服务:
uvicorn main:app --reload
③ 访问http://127.0.0.1:8000/users/123?name=alice,返回JSON响应。这里user_id: int会强制转为整数,【若传入字符串如"abc",FastAPI直接返回422错误且不进函数体】,比Express手动校验更省事。
注入Express式中间件逻辑
方法一:用FastAPI原生依赖注入模拟Express中间件链
在main.py顶部添加:
from fastapi import Depends, Request
async def log_middleware(request: Request):
print(f"→ {request.method} {request.url.path}")
return True
然后在路由装饰器中挂载:
@app.get("/items/", dependencies=[Depends(log_middleware)])
async def list_items(): return [{"id": 1, "name": "book"}]
方法二:直接复用Express风格的请求处理函数(需兼容async)
定义一个通用处理器:
async def express_like_handler(request):
body = await request.json()
return {"received": body, "status": "ok"}
再绑定到POST路由:
@app.post("/webhook")
async def handle_webhook(request: Request):
return await express_like_handler(request)
自动生成文档并验证交互能力
无需额外配置,启动服务后直接打开:
http://127.0.0.1:8000/docs
Swagger UI页面会自动列出所有@app.get/@app.post接口,点击“Try it out”即可填参发送请求。
关键点:所有路径参数、查询参数、请求体结构都从Python类型注解实时提取,【如果Pydantic模型字段没加类型提示,该字段就不会出现在文档Schema里】。
访问http://127.0.0.1:8000/redoc可切换ReDoc视图,更适合向产品/测试交付规范文档。


















