FastAPI 官方教程与用户指南:安装、运行与循序渐进学习路线全解析
导读:本文围绕 FastAPI 官方仓库中的《Tutorial - User Guide》(教程-用户指南,位于 docs/en/docs/tutorial/index.md)展开,它既是零基础到能独立编写 API 的分步教学主线,也是日后可随时回查速查的参考手册。读完本文你将掌握:用
uv快速初始化项目并安装 FastAPI、三种不同力度的安装选项如何取舍、如何把教程里的示例代码复制成main.py并用uv run fastapi dev一键启动带热重载的开发服务器,以及这套教程的全章节知识地图和后续进阶路径。
这份文档是 FastAPI 官方学习体系的"总入口"
在 FastAPI 官方文档站中,导航结构把学习路径组织为一条主线:先是 features.md 的功能概览、接着是 Python 类型简介与异步概念铺垫,然后进入真正的实战主线——Tutorial - User Guide,它的入口就是本次所聚焦的 index.md(对应 mkdocs.yml 中的 tutorial/index.md 节点)。
这份总入口文档自身篇幅不长,但承担着三项关键任务:
- 阐明学习方式——本教程按"每节在上一节基础上逐步累进"的方式编排,同时又刻意按主题切分,使读者可以直接跳到任意章节去解决当下具体的 API 需求;
- 给出"可运行代码"的承诺——文档中的所有代码块都是经过真实测试的 Python 文件,可以直接复制使用;
- 提供统一的安装与运行入口——即用
uv初始化项目、安装 FastAPI、以uv run fastapi dev运行示例的开发工作流。
换句话说,读懂这份入口文档,就等于拿到了整条官方学习路径的"操作手册"。
先确认环境:本仓库当前的 FastAPI 版本与 Python 要求
在动手之前,可以先了解当前仓库所代表的 FastAPI 版本基线(文章所述内容以该仓库为准)。在 fastapi/init.py 中声明了当前版本为 0.141.1,并从 applications.py 中导出了核心的 FastAPI 应用类。
从 pyproject.toml 可以看到,该版本要求 requires-python = ">=3.10",即 Python 3.10 及以上版本均可安装使用;其运行时的直接依赖包括 starlette、pydantic>=2.9.0、typing-extensions、typing-inspection、annotated-doc 等。这些约束决定了下面安装步骤中 uv 会为你的项目解析出的版本范围。
安装 FastAPI:推荐使用 uv 的项目化流程
教程入口文档给出的第一步是"搭建项目并加入 FastAPI",使用的是当前社区主流的 uv 包管理器。整体只需三条命令:
$ uv init awesome-project --bare
$ cd awesome-project
$ uv add "fastapi[standard]"
逐条解读这三条命令的作用:
uv init:创建一个新的 Python 项目;awesome-project:在名为awesome-project的新目录中创建项目;--bare:只生成最精简的pyproject.toml,不额外生成示例main.py、README.md等文件——应用代码将由你在后续教程步骤中自行创建;cd awesome-project:进入新项目目录后再执行依赖添加;uv add "fastapi[standard]":把 FastAPI 及其可选标准依赖一起加入项目。
关于 uv add 这条命令,文档特别解释了它的三层效果:
- 在项目内创建
.venv虚拟环境; - 将 FastAPI 写入
pyproject.toml的依赖声明; - 生成
uv.lock锁文件,从而保证日后在另一台电脑上部署时能安装到完全相同版本的依赖包。
这一过程被称为对项目依赖执行 locking(锁定),uv 会在添加包时自动完成。此外,uv 会优先复用你系统上已安装的兼容 Python 版本,若没有则会自动下载一个合适的版本,无需你手动安装解释器。
如果你希望手动管理虚拟环境与依赖,也可以退回到经典流程:先自行创建并激活虚拟环境,再执行 pip install "fastapi[standard]"(官方文档建议查阅虚拟环境指南了解详细步骤)。
三种安装粒度:standard / 精简 / 无云端 CLI
入口文档专门用一个折叠区块介绍了 FastAPI 的安装选项,三者差异如下:
| 安装命令 | 含义与适用场景 |
|---|---|
uv add "fastapi[standard]" |
默认推荐。安装 FastAPI 附带一批默认标准可选依赖,其中包含 fastapi-cloud-cli,可用于将应用一键部署到 FastAPI Cloud |
uv add fastapi |
最精简安装,不包含任何标准可选依赖 |
uv add "fastapi[standard-no-fastapi-cloud-cli]" |
安装全部标准依赖,但排除 fastapi-cloud-cli |
为什么"standard"与"精简"的差异值得关注?结合本仓库 pyproject.toml 中 standard 依赖组的实际声明,可以看到这套"标准依赖"实际上是把日常开发的高频配套一次性装齐:
fastapi-cli[standard]:提供fastapi dev、fastapi run等命令行工具;httpx:供 FastAPI 自带的测试客户端(TestClient)使用;jinja2:支持模板渲染;python-multipart:支持表单(Form)与文件上传(File)解析;email-validator:用于校验 email 字段;uvicorn[standard]:生产可用的 ASGI 服务器(含 uvloop 加速);pydantic-settings与pydantic-extra-types:补充配置管理与额外 Pydantic 数据类型;- 以及
fastar等底层支持组件。
尤其要注意的是:fastapi 命令行工具本身实现在独立的 fastapi-cli 包中。仓库内的 fastapi/cli.py 清晰地揭示了这一点——它尝试 from fastapi_cli.cli import main,若导入失败则会打印提示"请安装 fastapi[standard]"并抛出错误。因此,若你只装了裸的 fastapi 而想使用 fastapi dev 命令,就会遇到这个引导信息,这就是入口文档建议你安装 fastapi[standard] 的底层原因。
创建第一个可运行文件 main.py
安装完成后,教程要求把示例代码复制保存为 main.py。仓库中真实的示例源码位于 docs_src/first_steps/tutorial001_py310.py,内容是 FastAPI 最精简的"Hello World"应用:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
这段代码虽短,却完整包含了一个 FastAPI 应用的四个基本要素,后续整个教程都会围绕它们层层展开:
from fastapi import FastAPI:导入 FastAPI 类;app = FastAPI():创建 FastAPI 实例,作为整个 API 的交互主入口;@app.get("/"):路径操作装饰器(path operation decorator),声明下面的函数负责处理GET /请求;async def root()及其返回值:路径操作函数,FastAPI 收到匹配请求时会调用它,并把返回的字典自动序列化为 JSON 响应。
在入口文档对应的 first-steps.md 中会对这四个要素逐一定义:URL 中从第一个 / 开始的部分称为 路径(path),HTTP 的 GET/POST/PUT/DELETE 等方法在 OpenAPI 术语中称为 操作(operation),二者组合起来就是"路径操作"。FastAPI 不会限制你为某个 HTTP 方法赋予何种语义,常见的 POST 建数据、GET 读数据、PUT 更新、DELETE 删除只是通用约定而非强制约束。
教程承诺"所有代码块都是真实测试过的 Python 文件",这一点在仓库中可以实证:tests/test_tutorial/ 目录下为教程的几乎每一个主题都建立了同名测试目录(如 test_first_steps/、test_path_params/、test_dependencies/ 等),docs_src/ 中的示例代码正是这些测试的运行对象。
用 uv run fastapi dev 启动开发服务器
将上述代码保存为 main.py 后,在项目根目录执行:
$ uv run fastapi dev
首次启动时控制台会输出一段详细日志,逐行理解它有助于排查问题:
Searching for package file structure... / Importing from ...:CLI 会从含__init__.py的目录结构中自动探测并导入你的应用模块;module 🐍 main.py/code Importing the FastAPI app object from the module with the following code: from main import app:说明它识别出的导入串是main:app,即从main.py中导入名为app的对象;server Server started at http://127.0.0.1:8000:本机服务地址,浏览器打开即可看到{"message": "Hello World"}的 JSON 响应;server Documentation at http://127.0.0.1:8000/docs:自动生成的交互式 API 文档地址;Running in development mode, for production use: fastapi run:开发模式提示;Will watch for changes in these directories、Started reloader process ... using WatchFiles:说明当前处于热重载(auto-reload)状态,修改代码后服务器会自动重启。
其中 Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) 这一行标示了应用在本机实际监听的地址。
entrypoint 的自定义方式(进阶提示)
值得提前了解的是:fastapi 命令默认从 main.py 中找 app 对象。如果你的应用不在标准位置,可以在项目根目录的 pyproject.toml 里显式声明入口:
[tool.fastapi]
entrypoint = "main:app"
也可以给命令直接传文件路径或 --entrypoint 参数,例如 uv run fastapi dev main.py 或 uv run fastapi dev --entrypoint main:app。若你的代码按包组织(如放在 backend/main.py),entrypoint 需写成 backend.main:app。入口文档建议优先使用 pyproject.toml 中的 entrypoint 声明,因为这样其他工具(如 VS Code 扩展)也能自动定位到应用对象。这些细节的完整示例可在 first-steps.md 中查阅。
推荐的学习方式:动手编辑、本地运行
入口文档特别强调:强烈建议你把代码亲自抄写或复制下来,编辑后在本机运行。只有在编辑器中真实运行起来,才能直观体会到 FastAPI 的核心开发体验——需要手写的样板代码极少、全程的类型检查、自动补全等。这种"边读边跑"的方式也是理解后续每一章节的最有效手段。
由于本教程按主题独立切分,你可以按两种方式使用它:
- 顺序阅读:每一节在上节基础上逐步累进,适合从零系统学习;
- 按需跳读:遇到具体 API 需求时,直接跳到对应主题章节。
教程全章节知识地图
结合 mkdocs.yml 的导航结构,这条教程主线的完整章节组织如下,可以作为你的阅读或速查索引:
这张地图覆盖了入口文档所承诺的"用 FastAPI 的绝大多数特性",读者可据此规划自己的学习节奏。
面向 AI 编程助手的官方技能(AI Agent Skills)
作为该版本 FastAPI 的新能力,入口文档介绍了一个面向 AI 编码助手的官方技能(skill)。它的关键设计是:技能与 FastAPI 包一起分发,因此其指导内容始终与你项目中安装的 FastAPI 版本保持对齐,升级 FastAPI 时技能也随之更新。
在项目安装好 FastAPI 后,可用 Library Skills 安装该技能:
uvx library-skills
这里 uvx 是 uv tool run 的别名——它会在一个临时的隔离环境中运行 Library Skills,而 Library Skills 会扫描你项目中已安装的包,从而找到并安装对应的 FastAPI 技能。
该技能兼容 Codex、Claude Code、Cursor、GitHub Copilot、Gemini CLI、Pi、OpenCode 以及多数其他编码 Agent。若使用 Claude Code,在安装向导询问安装位置时选择 .claude/skills 目录即可。
学完本教程之后:进阶用户指南(Advanced User Guide)
入口文档最后提醒:除了当前这套《Tutorial - User Guide》,还有一份 Advanced User Guide(进阶用户指南) 可以在学完基础后继续阅读。
两者的关系是:
- 进阶指南建立在教程指南之上,使用相同的概念,只是额外讲解更多高级特性;
- 官方推荐的顺序是先读完本教程指南(即当前这份入口文档所引导的主线);
- 这样设计的目标是:仅凭教程指南你就能构建出完整的应用,之后可根据实际需求,借助进阶指南中的补充思路以不同方式扩展它。
小结:从这份入口文档出发的下一步
汇总这份入口文档给出的完整行动清单:
- 安装
uv,执行uv init awesome-project --bare初始化空白项目; - 执行
uv add "fastapi[standard]"安装 FastAPI(或按需选用精简/无云端 CLI 的安装变体); - 将教程示例代码写入
main.py(最小示例见 docs_src/first_steps/tutorial001_py310.py); - 运行
uv run fastapi dev启动热重载开发服务器,访问http://127.0.0.1:8000查看响应; - 按 mkdocs.yml 中的章节顺序逐节学习,或按需跳读;
- 需要时可通过
uvx library-skills为 AI 编程助手安装与版本对齐的官方技能; - 完成教程主线后,继续阅读 Advanced User Guide 以获得更高阶的扩展能力。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00