FastAPI 教程
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Python Web 框架,专为构建 RESTful API 而设计。
FastAPI 使用 Python 3.8+ 并基于标准的 Python 类型提示,使用 Starlette 和 Pydantic 构建,能够自动生成 API 文档并进行数据校验。
谁适合阅读本教程?
本教程适合有 Python 基础的开发者学习。如果你已经了解 Python 的基本语法和类型注解,那么你将能够快速上手 FastAPI。
学习本教程前你需要了解
学习本教程前你需要了解一些基础的 Web 知识及 Python 3.x 基础教程。如果你对 HTTP 请求方法(GET、POST 等)不太熟悉,建议先阅读 HTTP 教程。
FastAPI 特点
FastAPI 之所以在 Python Web 框架中脱颖而出,主要得益于以下特点:
| 特点 | 说明 |
|---|---|
| 高性能 | 基于 Starlette 和 Pydantic,性能与 NodeJS 和 Go 相当,是最快的 Python 框架之一 |
| 快速开发 | 开发速度提升约 200%-300%,标准类型声明即可完成数据校验和文档生成 |
| 减少错误 | 减少约 40% 的人为错误,类型系统自动捕获常见问题 |
| 自动文档 | 自动生成交互式 API 文档(Swagger UI 和 ReDoc),无需手动维护 |
| 类型安全 | 基于标准 Python 类型提示,编辑器提供全面的自动补全和错误检查 |
| 异步支持 | 原生支持 async/await,可高效处理 IO 密集型任务 |
FastAPI 适用场景
| 场景 | 说明 |
|---|---|
| 构建 API 后端 | 用于构建 RESTful API,支持前后端分离的 Web 应用 |
| 微服务架构 | 轻量高效,适合作为微服务后端框架 |
| 数据处理 API | 适用于接收和返回 JSON 数据的数据处理服务 |
| 实时通信 | 支持 WebSocket,适用于实时通信场景 |
| 机器学习服务 | 可将训练好的模型封装为 API,方便前端和其他服务调用 |
FastAPI 技术栈
FastAPI 构建在两个核心库之上:
| 组件 | 作用 | 说明 |
|---|---|---|
| Starlette | Web 框架层 | 提供路由、中间件、WebSocket 等基础 Web 功能,FastAPI 直接继承自 Starlette |
| Pydantic | 数据校验层 | 基于 Python 类型提示进行数据校验、序列化和文档生成 |
| Uvicorn | ASGI 服务器 | 基于 uvloop 和 httptools 的高性能 ASGI 服务器,用于运行 FastAPI 应用 |
FastAPI 是 Starlette 的子类,因此你可以使用 Starlette 的所有功能。同时 FastAPI 完全兼容 Pydantic,包括基于 Pydantic 的 ORM(如 SQLModel)等外部库。
为什么选择 FastAPI?
| 对比维度 | FastAPI | Flask | Django |
|---|---|---|---|
| 性能 | 高(异步,ASGI) | 中(同步,WSGI) | 中(同步,WSGI) |
| 自动文档 | 内置(Swagger UI + ReDoc) | 需第三方扩展 | 需第三方扩展 |
| 类型校验 | 内置(Pydantic) | 需手动实现 | 需手动实现 |
| 异步支持 | 原生支持 | 需扩展 | 3.1+ 支持 |
| 学习曲线 | 低 | 低 | 较高 |
| 适用规模 | 中小型 / 微服务 | 中小型 | 大型 / 全栈 |
相关链接
| 资源 | 地址 |
|---|---|
| FastAPI 官方文档 | https://fastapi.tiangolo.com/zh/ |
| FastAPI 源码 | https://github.com/tiangolo/fastapi |
| Starlette 文档 | https://www.starlette.dev/ |
| Pydantic 文档 | https://docs.pydantic.dev/ |
