fastapi默认支持自动文档生成和异步,但必须正确定义pydantic basemodel并选用uvicorn作为asgi服务器;uvicorn是官方强绑定的唯一开发服务器,因其原生支持async/await和asgi协议,而gunicorn等wsgi服务器会丢失异步能力导致性能减半。

直接上手就能跑通,不需要额外配置文档生成或异步开关——FastAPI 默认就支持这两项。关键在于别跳过类型定义和 ASGI 服务器选型,否则本地能跑、上线就报错。
为什么 uvicorn 是唯一推荐的开发服务器?
uvicorn 是 FastAPI 唯一被官方强绑定的 ASGI 服务器,Starlette 的异步能力必须靠它落地。用 gunicorn 或 waitress 会丢掉 async 支持,性能直接打对折。
- 启动命令必须是
uvicorn main:app --reload,不能写成python main.py -
--reload只在开发环境启用;生产环境要换--workers 4+--host 0.0.0.0:8000 - 如果提示
Address already in use,先杀掉残留进程:lsof -i :8000 | grep LISTEN | awk '{print $2}' | xargs kill -9
BaseModel 不只是校验,它决定请求体结构和文档字段
没定义 BaseModel 就直接写 def create_item(item: dict),等于放弃自动校验、IDE 提示、OpenAPI 文档生成——这三样加起来省掉至少 60% 的调试时间。
- 字段类型必须显式声明:
price: float比price: Any多出数值范围校验和 Swagger 中的 type=number - 可选字段用
= None或= Field(default=None),不能写price: Optional[float](Pydantic v2 已弃用) - 路径参数(如
/items/{item_id})和查询参数(如?q=abc)不用BaseModel,但请求体(POST /items/的 JSON body)必须用
异步函数不是加个 async 就完事
写了 async def read_item() 却在里面调 requests.get() 或 sqlite3.connect(),等于把异步协程当同步函数用,CPU 线程照样卡死。
- I/O 操作必须用异步库:HTTP 调用换
httpx.AsyncClient,数据库换asyncpg或sqlalchemy.ext.asyncio - 阻塞操作(如 PIL 图片处理、加密计算)必须用
run_in_executor包一层,否则整个事件循环会被拖慢 - 普通字典操作、字符串拼接、JSON 序列化这些 CPU 轻量操作,不用
async反而更快
最容易被忽略的是依赖注入的生命周期管理——比如数据库 session 在每次请求中只初始化一次、用完即关,这事不手动控制,连接池很快就会耗尽。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











