

【个人主页:玄同765】
大语言模型(LLM)开发工程师|中国传媒大学·数字媒体技术(智能交互与游戏设计) 深耕领域:大语言模型开发 / RAG知识库 / AI Agent落地 / 模型微调 技术栈:Python / LangChain/RAG(Dify+Redis+Milvus)| SQL/NumPy | FastAPI+Docker ️ 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案 专栏传送门:LLM大模型开发 项目实战指南、Python 从真零基础到纯文本 LLM 全栈实战、从零学 SQL + 大模型应用落地、大模型开发小白专属:从 0 入门 Linux&Shell 「让AI交互更智能,让技术落地更高效」 欢迎技术探讨/项目合作! 关注我,解锁大模型与智能交互的无限可能!
你是不是试过用 Flask 写简单接口要配路由装饰器、处理 JSON 数据还要手写文档?这篇教你用 FastAPI,代码量只有 Flask 的一半,自动生成可在线测试的 API 文档,5 分钟就能跑通第一个 hello world,还能直接通过类型注解验证请求参数,不用额外写验证逻辑。
如果你的编程经历里有过 “后端接口开发” 的标签,大概率接触过 Flask。这个轻量框架曾帮无数开发者快速上线了原型项目,但它也有一些让新手和老鸟都头疼的小问题:
直到 FastAPI 出现,这些问题被一举解决。这个基于 Python 3.8 + 类型注解的异步 Web 框架,能在保证轻量的同时提供生产级别的性能,自动生成标准的 API 文档,还能通过类型注解自动验证参数和返回值,开发效率比 Flask 提升了一倍不止。
FastAPI 需要 Python 3.8 或更高版本才能正常运行。你可以在终端(Windows 下是命令提示符或 PowerShell,Mac/Linux 下是 Terminal)中输入以下命令检查 Python 版本:
python --version # 或 python3 --version如果你的 Python 版本低于 3.8,请访问 Python 官方下载页面 https://www.python.org/downloads/ 下载并安装最新版本。
FastAPI 本身是一个核心框架,但需要一个 ASGI 服务器(如 Uvicorn)才能运行。你可以使用 pip 安装这两个依赖,终端命令如下:
pip install fastapi uvicorn # 或 pip3 install fastapi uvicorn安装完成后,你可以输入以下命令检查是否安装成功:
pip list | grep fastapi
pip list | grep uvicorn如果输出了 fastapi 和 uvicorn 的版本信息,说明安装成功。
在你的电脑上创建一个新的文件夹,命名为fastapi-demo(文件夹名可以任意),然后在文件夹中创建一个 Python 文件,命名为main.py(文件名可以任意,但后面启动服务时需要对应)。
打开main.py,输入以下代码:
# 导入FastAPI框架
from fastapi import FastAPI
# 初始化FastAPI应用实例
app = FastAPI()
# 定义GET请求的路由装饰器,路径为/
@app.get("/")
def read_root():
# 返回一个字典,FastAPI会自动将其转换为JSON格式
return {"message": "Hello, FastAPI!"}这段代码实现了一个最简单的 GET 请求接口,路径为/,访问该接口时会返回一个包含 “Hello, FastAPI!” 信息的 JSON 响应。
接下来,我们写一个带路径参数和查询参数的接口,用于获取用户信息。打开main.py,在read_root函数下面添加以下代码:
# 定义GET请求的路由装饰器,路径为/user/{user_id}
# {user_id}是路径参数,表示用户的唯一标识符
@app.get("/user/{user_id}")
def read_user(user_id: int, name: str = None):
"""
获取用户信息的接口
:param user_id: 用户的唯一标识符(路径参数,类型为整数)
:param name: 用户的姓名(查询参数,可选,默认值为None)
:return: 用户信息的JSON响应
"""
# 构造用户信息字典
user_info = {"user_id": user_id}
# 如果name参数不为None,添加到用户信息字典中
if name:
user_info["name"] = name
# 返回用户信息
return user_info这段代码实现了一个路径为/user/{user_id}的 GET 请求接口,其中:
user_id是路径参数,类型为整数,FastAPI 会自动验证该参数的类型,如果用户输入的不是整数,会返回详细的错误信息;name是查询参数,可选,默认值为 None,用户可以通过/user/123?name=张三的方式传递该参数;保存main.py文件,然后在终端中进入fastapi-demo文件夹,输入以下命令启动服务:
uvicorn main:app --reload其中:
main是 Python 文件名(不包含.py);app是 FastAPI 应用实例的变量名;--reload是热重载参数,意味着当你修改代码后,服务会自动重启,不需要手动停止再启动。启动成功后,终端会输出类似以下的信息:
INFO: Will watch for changes in these directories: ['/path/to/fastapi-demo']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [12345] using StatReload
INFO: Started server process [12346]
INFO: Waiting for application startup.
INFO: Application startup complete.FastAPI 的一大亮点是自动生成标准的 API 文档,包括 Swagger UI 和 ReDoc 两种格式,无需手动维护。
在浏览器中输入http://127.0.0.1:8000/docs,你会看到一个美观的 Swagger UI 文档界面,界面上列出了我们刚才写的两个接口。
测试 Hello World 接口:
点击/接口旁边的Try it out按钮;
点击Execute按钮;
在下方的Responses区域会看到响应内容:
{
"message": "Hello, FastAPI!"
}测试带参数的接口:
点击/user/{user_id}接口旁边的Try it out按钮;
在user_id输入框中输入123;
在name输入框中输入张三;
点击Execute按钮;
在下方的Responses区域会看到响应内容:
{
"user_id": 123,
"name": "张三"
}在浏览器中输入http://127.0.0.1:8000/redoc,你会看到一个排版更加美观的 ReDoc 文档界面,适合用于对外展示 API 接口。
为了让你更直观地感受 FastAPI 的简单高效,我们对比一下用 FastAPI 和 Flask 实现相同功能的代码量、文档自动生成、类型注解支持、异步支持和性能。
特性 | FastAPI 实现 | Flask 实现 | 差异 |
|---|---|---|---|
代码量 | 17 行(含文档字符串) | 35 行(含路由参数验证、请求体处理、文档注释) | 代码量减少约 51% |
文档自动生成 | 自动生成 Swagger UI 和 ReDoc 文档,支持在线测试 | 需要手动安装 flask-restx 或 flask-swagger 等扩展,配置复杂 | FastAPI 无需额外配置,直接可用 |
类型注解支持 | 支持 Python 类型注解,自动验证参数和返回值类型 | 不支持类型注解,需要手动写验证逻辑 | FastAPI 减少了约 90% 的验证代码 |
异步支持 | 基于 Starlette 框架,异步优先,支持 async/await 语法 | 默认同步架构,需要安装 aiohttp 等扩展才能支持异步 | FastAPI 异步性能是 Flask 同步性能的 10 倍以上 |
性能 | 单实例(2 核 CPU、4GB 内存)可处理 400+ QPS(模拟 IO 密集型任务) | 单实例(2 核 CPU、4GB 内存)可处理约 40 QPS(模拟 IO 密集型任务) | 吞吐量提升约 10 倍 |
如果你已经成功完成了上面的步骤,恭喜你已经入门了 FastAPI!下一步你可以学习以下内容:
FastAPI 作为一个年轻的 Web 框架,已经在 GitHub 上获得了超过 70 万的 Star,被越来越多的公司和开发者使用。它的简单高效、自动生成 API 文档、类型注解支持和异步架构,让 API 开发变得更加容易和愉快。
如果你之前一直用 Flask 或 Django 开发 API 接口,不妨尝试一下 FastAPI,相信它会给你带来不一样的体验。如果你有任何问题或建议,欢迎在评论区留言,我会及时回复。