FastAPI 是什么
这是什么:FastAPI 是一个现代、高性能的 Python Web 框架,专注于快速构建 API——你用类型注解描述参数,它负责自动校验、自动转换、自动生成文档。
为什么用:现代后端的主战场是「写 API 吐 JSON」:小程序、App、前端页面、AI 应用全靠接口吃饭。用 Flask 写接口,参数校验要手写、接口文档要手补;FastAPI 把这两件最烦的事自动化了,还原生支持异步,快得理直气壮。
如何用:本章先建立对它的整体认知,搞清和 Flask 的分工,下一章就用 4 行代码把服务跑起来。
一句话原理:类型注解在打工
FastAPI 的魔法核心是一句话:你声明参数是什么类型,它就自动按这个类型校验和转换。
def read_item(item_id: int, q: str = "hello"):
...
这一行函数签名在 FastAPI 眼里是完整的需求单:item_id 必须是整数(不是就自动回 422 报错),q 是可选字符串、默认 "hello"。不用手写 int(request.args.get(...)),不用手写 if 校验——签名即文档,文档即测试。
三大特性
| 特性 | 什么意思 | 你得到什么 |
|---|---|---|
| 类型注解驱动 | 函数签名里的 int、str、自定义类都参与校验 |
非法请求自动被拦下,返回清晰的错误明细 |
| 自动交互文档 | 根据代码自动生成 /docs 页面 |
浏览器里点开就能填参数、发请求、看响应,Postman 都省了 |
| 原生异步 | async def 直接写,底层基于 Starlette |
高并发场景(如 AI 接口转发)性能出色 |
它不是从零造轮子:底层 Web 能力来自 Starlette(异步框架),数据校验来自 Pydantic(类型校验库),FastAPI 把两者黏合成「写起来最舒服」的形态。会用就行,不必深究。
FastAPI vs Flask:分工与对照
| 场景 | 更适合 | 原因 |
|---|---|---|
| 渲染网页的小站、个人博客 | Flask | 模板渲染顺手,生态成熟(你在学的这个博客后端就是这类) |
| 前后端分离的 API 后端 | FastAPI | JSON 接口为主,自动校验 + 文档是刚需 |
| AI / 大模型服务接口 | FastAPI | 异步高并发 + 流式响应支持好,LLM 服务端标配 |
| 内部工具、快速原型 | 都行 | 会哪个用哪个 |
概念几乎一一对应,学过 Flask 的你迁移成本极低:
| 概念 | Flask | FastAPI |
|---|---|---|
| 起实例 | Flask(__name__) |
FastAPI() |
| 挂路由 | @app.route("/") |
@app.get("/") |
| 开发服务器 | flask run |
uvicorn main:app --reload |
| 接收参数 | request.args 手动取 |
函数签名自动注入 |
它出现在哪
- AI 服务端:给大模型套一层 HTTP 接口(你以后学 LLM 教程调用的很多服务就是这么搭的)
- 前后端分离:给 Vue / React 页面供数据,本站后台管理就是这么分工的
- 微服务 / 内部工具:类型校验 + 自动文档让团队协作省心
记忆口诀:签名写类型,校验它全包;docs 点一点,文档自动标。
📝 本章小结
- FastAPI 是类型注解驱动的现代 API 框架:自动校验、自动文档、原生异步
- 底层 = Starlette(Web)+ Pydantic(校验),FastAPI 负责黏合与易用
- 与 Flask 概念一一对应;Flask 擅网页渲染,FastAPI 擅纯 API 与高并发
- 自动交互文档
/docs是它最出圈的魅力,下一章亲眼见
动手改
- 去 FastAPI 官方文档首页扫一眼,感受一下「签名即文档」的代码长相
- 对着上表把 Flask 的对应概念回忆一遍,说不出的标记出来,后面章节重点看
- 想一个你做过的(或想做的)项目,判断它更适合 Flask 还是 FastAPI
下一章:第一个应用,4 行代码把服务跑起来 🐸