FastAPI:基于类型提示的高性能 Python Web 框架
FastAPI:基于类型提示的高性能 Python Web 框架
FastAPI 是一款用于构建 API 的 Python Web 框架,目前在 GitHub 上获得了超过 99,000 个 Star:


FastAPI 的核心思路是利用 Python 原生的类型提示来声明 API 的参数、请求体和返回值。你不需要学一套新的模板语法,只需要写标准的 Python 函数签名,框架会自动完成数据校验、类型转换和接口文档生成。
项目底层依赖 Starlette 处理 HTTP 连接,依赖 Pydantic 做数据校验和序列化。这两个库各自专注一个领域,FastAPI 把它们组合在一起,形成了完整的 API 开发方案。
性能表现
在 TechEmpower 的基准测试中,FastAPI 的吞吐量和 NodeJS、Go 处于同一梯队。和传统的 Flask、Django REST Framework 相比,FastAPI 在纯 JSON 序列化场景下快出数倍。这主要归功于 Pydantic V2 的底层用 Rust 重写,以及 Starlette 对 asyncio 的原生支持。
如果你的接口不需要异步,直接用 def 定义路由函数就行。如果需要调用外部 HTTP 服务或数据库驱动,可以用 async def 声明异步路由,框架会在 asyncio 事件循环中调度执行。
开发效率
框架设计上做了几项取舍来提升编码速度:
- 用标准 Python 类型声明参数,不需要额外学 DSL
- 编辑器能直接推断类型,补全和报错即时可用
- 声明一次类型,同时获得校验、序列化和文档生成
- 自动生成 OpenAPI 文档,支持 Swagger UI 和 ReDoc 两种界面
代码示例
一个最简的 FastAPI 应用只需要几行代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
用 Pydantic 模型声明请求体:
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool | None = None
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
启动开发服务器的命令是 fastapi dev,框架会自动检测代码中的 FastAPI 实例并用 Uvicorn 启动,开发模式下默认开启热重载。保存代码后浏览器刷新就能看到变更,不需要手动重启进程。
自动文档
启动后访问 /docs 可以看到 Swagger UI 界面,访问 /redoc 可以看到 ReDoc 界面。两个界面都是根据代码中的类型声明自动生成的,修改代码后文档会同步更新,不需要额外维护。
Swagger UI 支持在线调试,填入参数后直接点击执行按钮就能看到返回结果。这对前后端联调和接口对接比较方便,前端不用等后端写完文档再开发。
依赖注入
FastAPI 内置了一套依赖注入系统。常见的用法是把数据库连接、当前登录用户、权限校验等逻辑封装成依赖函数,然后在路由参数中声明。框架会自动解析依赖链,按顺序执行,并在请求结束后清理资源。
一个典型的例子是用依赖函数来获取当前用户:
from fastapi import Depends, HTTPException
def get_current_user(token: str):
user = decode_token(token)
if not user:
raise HTTPException(status_code=401)
return user
@app.get("/me")
def read_me(user = Depends(get_current_user)):
return user
这种方式把认证逻辑从路由函数中剥离出来,多个路由可以复用同一个依赖函数,代码会干净一些。
安装
pip install "fastapi[standard]"
standard 组会同时安装 Uvicorn、python-multipart 等常用依赖。如果只需要核心功能不带额外依赖,直接 pip install fastapi 即可。
生态和使用场景
微软、Uber、Netflix、Cisco 等公司的团队在生产环境使用 FastAPI 构建内部服务。Netflix 用 FastAPI 开源了他们的危机管理调度框架 Dispatch,Uber 用它给内部的 Ludwig 机器学习框架提供 REST 接口。
框架内置支持的功能包括:依赖注入、OAuth2 和 JWT 认证、WebSocket、CORS、基于 pytest 和 HTTPX 的测试方案。需要 CLI 工具的话,同一作者开发的 Typer 框架和 FastAPI 风格一致,可以配合使用。FastAPI 还提供了一键部署到 FastAPI Cloud 的功能,执行 fastapi deploy 就能把应用推送到云端。
如果不想绑定在特定云厂商,FastAPI 本身是纯 Python 实现,可以部署到任何支持 Python 的环境,包括 Docker、Kubernetes、AWS Lambda 等。
能把应用推送到云端。
如果不想绑定在特定云厂商,FastAPI 本身是纯 Python 实现,可以部署到任何支持 Python 的环境,包括 Docker、Kubernetes、AWS Lambda 等。
更多推荐


所有评论(0)