FastAPI 简介:特性、优势与适用场景
本教程共 50 篇 · 第 1 篇 · 更新于 2026-08-12 · 约 7 分钟阅读
本节目标:搞懂 FastAPI 到底是什么、靠什么做到又快又好用,并判断它适合用在哪些项目里。
1-1 什么是 FastAPI
FastAPI 是一个用 Python 写 Web API 的现代框架。它的目标是帮你又快又稳地做出接口服务。
“API” 可以理解为一套规则,让不同的程序之间互相说话。比如手机 App 向服务器要数据,用的就是 API。
FastAPI 这个名字已经说清了两件事。“Fast” 指它性能好、开发也快。“API” 指它专门为写接口而生。
它从 2018 年底由 Sebastian Ramírez 发起,如今已是 Python 圈最热门的接口框架之一。
NoteFastAPI 专注做”后端接口”,不是用来直接渲染网页的模板引擎。你要做网站页面,通常配合前端框架或模板工具。
1-2 它的技术底座:Starlette 与 Pydantic
FastAPI 并不从零造轮子,而是站在两个成熟库肩上工作。
第一层是 Starlette。它负责最底层的 Web 能力:路由、请求响应、中间件、WebSocket 等。FastAPI 本身就继承自 Starlette 类,所以 Starlette 的功能它全能用。
第二层是 Pydantic。它负责数据这件事:把你收到的 JSON 自动变成带类型的 Python 对象,并做校验。你写的类型注解,就是它工作的依据。
第三层是 Uvicorn。它是真正把应用跑起来的 ASGI 服务器。你可以把它想成”发动机”,FastAPI 是”车架”,发动机提供动力。
Tip记住一句口诀:Starlette 管”怎么接请求”,Pydantic 管”怎么处理数据”,Uvicorn 管”怎么跑起来”。
1-3 类型提示驱动:写代码就像写说明
FastAPI 最与众不同的地方,是它把 Python 的类型提示当成了核心功能。
类型提示就是你给变量标上”这是什么类型”。比如 name: str 表示 name 是字符串。
在其他框架里,类型往往只是”给人看的注释”。但在 FastAPI 里,类型提示会被真正用来:自动校验数据、自动生成文档、自动给出编辑器补全。
你不需要学一套新语法,用的就是标准 Python。这一点对初学者非常友好。
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
async def hello(name: str):
# name 被声明为 str,FastAPI 会自动校验它
return {"msg": f"你好,{name}"}
上面这个函数,FastAPI 会知道 name 是必填的字符串参数,并在文档里写清楚。
1-4 自动交互文档:写完代码就有文档
这是很多人爱上 FastAPI 的原因。你每写一个接口,它就自动生成两套在线文档。
第一套是 Swagger UI,地址是 /docs。它不仅能看,还能直接在网页里填参数、点按钮发请求测试。
第二套是 ReDoc,地址是 /redoc。它排版更适合阅读,适合慢慢浏览接口定义。
这两套文档不是手工维护的,而是 FastAPI 根据你的代码实时生成的。你改了代码,文档就跟着变。
Note自动文档基于 OpenAPI 标准。后面会有专门一章带你玩转
/docs和/redoc。
1-5 异步支持与高性能
FastAPI 原生支持 async/await 异步写法。简单说,它能在等待一个慢操作(比如查数据库)时,去处理别的请求,从而支撑更高的并发。
性能上,FastAPI 属于 Python 框架里最快的一档,官方 benchmark 显示它和 NodeJS、Go 处于同一水平。这得益于底层的 Starlette 与 Uvicorn 都用高效实现。
写代码时,默认推荐用 async def。只有在做明显阻塞的操作时才用普通 def,这点后面会讲清楚。
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
# 模拟一个异步等待操作
await asyncio.sleep(0.1)
return {"message": "Hello World"}
1-6 与其他框架客观对比
初学者常问:Flask、Django、FastAPI 到底选哪个?它们各有侧重,没有绝对好坏。
Flask 轻巧灵活,学习曲线低,但自动文档、数据校验都要自己接第三方。适合小项目或想完全掌控结构的场景。
Django 功能全面,自带 Admin、ORM、模板,适合大而全的网站。但它传统上偏同步,生态偏向”全栈”。
FastAPI 介于两者之间偏”接口专用”。它天生异步,自带文档与校验,特别适合做纯 API 后端、微服务、机器学习服务接口。
Tip如果你是做前后端分离、App 后端、AI 模型接口,FastAPI 往往是最省心的选择。如果你要快速搭一个带后台管理的完整网站,Django 也很成熟。
| 对比维度 | FastAPI | Flask | Django |
|---|---|---|---|
| 性能模型 | 异步 ASGI | 同步 WSGI | 同步 WSGI |
| 自动文档 | 内置两套 | 需扩展 | 需扩展 |
| 数据校验 | 内置 Pydantic | 需手写 | 需手写 |
| 异步支持 | 原生 | 需扩展 | 部分支持 |
| 学习曲线 | 低 | 低 | 较高 |
| 适合规模 | 接口/微服务 | 中小型 | 大型全栈 |
1-7 FastAPI 适合用在哪
基于上面的特性,下面是 FastAPI 的常见落地场景。
RESTful API 后端:前后端分离架构里,它作为后端提供 JSON 接口,非常顺手。
微服务:它轻量、启动快,适合拆成多个小服务独立部署。
机器学习服务:训练好的模型可以用 FastAPI 包成接口,前端或其他服务直接调用。
数据处理接口:接收 JSON、返回 JSON 的数据处理服务,它的校验能力能省很多心。
实时通信:基于 Starlette 的 WebSocket 支持,它也能做聊天、推送等实时场景。
Note如果你需要的是渲染完整网页(带模板、会话、Admin 后台),可以搭配 Jinja2 模板,或考虑 Django。FastAPI 主战场仍是接口。
1-8 小结:为什么值得学
FastAPI 把”快”做到了两个层面:运行快、开发也快。类型提示驱动的设计,让你少写重复代码,少出低级错误。
它站在 Starlette 和 Pydantic 两个成熟肩膀上,标准、稳定、生态活跃。自动文档让前后端协作成本大幅下降。
对 0 基础同学来说,你只要会一点 Python 语法和类型注解,就能顺着本教程一步步搭出自己的接口服务。下一章,我们先把开发环境准备好。