FastAPI入门:Python后端开发新手指南
作者:一位维护过多个开源项目的后端工程师,写过数十篇技术文档。本文源于我当初带实习生时反复讲解的基础内容——我希望你能少走我当年踩过的坑。
为什么我要写这篇教程?
最近几年,越来越多刚学完 Python 基础的同学问我:“我想做后端开发,该选哪个框架?” 有人推荐 Django,有人鼓吹 Flask,还有人说 Go 才是未来。作为过来人,我理解这种选择焦虑。
我自己当初学的时候,也花了大量时间在“选型”上纠结。结果呢?光看不练,三个月还没写出第一个接口。后来我才明白:工具不是目的,解决问题才是。FastAPI 正好是一个能让你快速上手、写出可用 API 的现代框架。
更重要的是——如果你正在准备简历,掌握 FastAPI 能让你的项目经历立刻脱颖而出。它轻量、高效、自带文档,而且和主流云服务、数据库生态兼容良好。
今天,我就带你从零开始,用最简单的语言、最少的代码,走进 FastAPI 的世界。
一、FastAPI 是什么?能用来做什么?
FastAPI 是一个用于构建 Web API(应用程序接口)的 Python 框架。简单来说,它能帮你把 Python 函数变成可以通过网络访问的服务。
比如:
- 用户在手机 App 上点击“登录”,App 会向你的服务器发送一个请求
- 你的 FastAPI 程序接收到这个请求,验证用户名密码
- 然后返回“登录成功”或“密码错误”
这就是一个典型的 API 调用过程。
FastAPI 的特点:
- 快:性能接近 Go(后面我们会对比)
- 自动文档:写完代码,自动生成交互式 API 文档(Swagger UI)
- 类型安全:基于 Python 类型提示(Type Hints),减少 bug
- 异步支持:天然支持
async/await,适合高并发场景
二、技术选型对比:FastAPI vs Flask vs Django vs Go
很多新手卡在“选哪个框架”的问题上。下面我用一张表帮你理清思路:
| 特性 | FastAPI | Flask | Django | Go (Gin/Echo) |
|---|---|---|---|---|
| 学习曲线 | ⭐⭐(低) | ⭐⭐ | ⭐⭐⭐⭐(高) | ⭐⭐⭐(中高) |
| 自动文档 | ✅ 内置 | ❌ 需插件 | ❌ 需第三方 | ❌ 需手动 |
| 异步支持 | ✅ 原生 | ✅(需配置) | ❌(Django 4+部分支持) | ✅ 原生 |
| 性能 | 高(接近 Go) | 中 | 中 | 极高 |
| 适合场景 | 微服务、API 后端 | 小型应用、原型 | 全栈网站、后台系统 | 高并发、云原生 |
| 是否需要写简历加分 | ✅(新兴、热门) | ⚠️(较传统) | ✅(经典但重) | ✅✅(大厂偏爱) |
💡 我的建议:
- 如果你是纯新手,想快速做出一个 API 练手 → 选 FastAPI
- 如果你想进大厂,简历上同时有 FastAPI + Go 项目,会非常亮眼
- 别一上来就学 Go!先用 Python 把后端逻辑搞懂,再迁移到 Go 更高效
三、环境准备:5 分钟搭建开发环境
步骤 1:安装 Python(3.7+)
确保你已安装 Python 3.7 或更高版本。在终端运行:
python --version
# 或
python3 --version
如果没安装,请去 python.org 下载。
步骤 2:创建虚拟环境(强烈推荐)
# 创建项目文件夹
mkdir my_fastapi_app
cd my_fastapi_app
# 创建虚拟环境(Windows 用 python -m venv venv)
python3 -m venv venv
# 激活虚拟环境
# Linux/macOS:
source venv/bin/activate
# Windows:
venv\Scripts\activate
你会看到命令行前多了 (venv),说明激活成功。
步骤 3:安装 FastAPI 和 Uvicorn
pip install fastapi uvicorn[standard]
fastapi:核心框架uvicorn:ASGI 服务器,用来运行 FastAPI 应用(相当于 Flask 的flask run)
📝 小知识:ASGI 是比 WSGI 更现代的 Python Web 服务器协议,支持异步。
步骤 4:验证安装
创建一个文件 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello, FastAPI!"}
运行服务:
uvicorn main:app --reload
main:app表示:从main.py文件中导入app对象--reload表示:代码修改后自动重启(开发时超有用!)
打开浏览器,访问 http://127.0.0.1:8000,你会看到:
{"message": "Hello, FastAPI!"}
再访问 http://127.0.0.1:8000/docs,神奇的事情发生了——自动生成的 API 文档!
四、核心概念:用最简单的话讲清楚
1. 路由(Route)
路由就是“路径 + 方法”的组合。比如:
GET /users→ 获取用户列表POST /users→ 创建新用户
在 FastAPI 中,用装饰器定义:
@app.get("/hello") # GET 请求
@app.post("/create") # POST 请求
@app.put("/update") # PUT 请求
@app.delete("/delete") # DELETE 请求
2. 路径参数 vs 查询参数
- 路径参数:放在 URL 路径里,如
/users/123 - 查询参数:放在
?后面,如/search?q=python
代码示例:
# 路径参数
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
# 查询参数
@app.get("/search")
def search(q: str = None):
return {"query": q}
访问:
http://.../items/42→ 返回{"item_id": 42}http://.../search?q=fastapi→ 返回{"query": "fastapi"}
3. 请求体(Request Body)与 Pydantic 模型
当你需要接收 JSON 数据(比如注册用户),就要用 Pydantic 模型来定义数据结构。
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
email: str
age: int
@app.post("/users")
def create_user(user: UserCreate):
return {"message": f"User {user.name} created!"}
现在你可以用工具(如 Postman 或 curl)发送 POST 请求:
curl -X POST http://127.0.0.1:8000/users \
-H "Content-Type: application/json" \
-d '{"name":"Alice","email":"alice@example.com","age":25}'
返回:
{"message": "User Alice created!"}
💡 为什么用 Pydantic?
它会自动校验数据类型!如果你传了"age": "not_a_number",FastAPI 会直接返回 422 错误,并告诉你哪里错了——这对新手调试太友好了!
五、实战项目:做一个“待办事项(Todo)” API
我们来做一个完整的 Todo 应用,包含增删改查。
步骤 1:定义数据模型
# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI()
class TodoItem(BaseModel):
id: int
title: str
completed: bool = False
# 模拟数据库(实际项目用 SQLite/PostgreSQL)
todos = []
next_id = 1
步骤 2:实现 CRUD 接口
# 获取所有待办事项
@app.get("/todos", response_model=List[TodoItem])
def get_todos():
return todos
# 创建新待办事项
@app.post("/todos", response_model=TodoItem)
def create_todo(todo: TodoItem):
global next_id
todo.id = next_id
todos.append(todo)
next_id += 1
return todo
# 获取单个待办事项
@app.get("/todos/{todo_id}", response_model=TodoItem)
def get_todo(todo_id: int):
for todo in todos:
if todo.id == todo_id:
return todo
raise HTTPException(status_code=404, detail="Todo not found")
# 更新待办事项
@app.put("/todos/{todo_id}", response_model=TodoItem)
def update_todo(todo_id: int, updated_todo: TodoItem):
for i, todo in enumerate(todos):
if todo.id == todo_id:
updated_todo.id = todo_id # 保持 ID 不变
todos[i] = updated_todo
return updated_todo
raise HTTPException(status_code=404, detail="Todo not found")
# 删除待办事项
@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int):
for i, todo in enumerate(todos):
if todo.id == todo_id:
todos.pop(i)
return {"message": "Deleted"}
raise HTTPException(status_code=404, detail="Todo not found")
步骤 3:测试你的 API
- 运行服务:
uvicorn main:app --reload - 打开
http://127.0.0.1:8000/docs - 在网页上点击 “Try it out”,直接在浏览器里测试每个接口!
比如创建一个 Todo:
- 点击
POST /todos - 输入 JSON:
{ "title": "Learn FastAPI", "completed": false } - 点击 “Execute”,你会看到返回结果,包括自动生成的
id
六、新手常见问题解答(FAQ)
Q1:为什么我的代码改了,页面没更新?
A:确保你启动时加了 --reload 参数。如果没有,手动重启服务。
Q2:如何处理数据库?
A:初学者建议先用 SQLite + SQLAlchemy。等熟悉后,再学 Tortoise-ORM(异步 ORM)或 SQLModel(FastAPI 作者开发的新库)。
Q3:FastAPI 能部署吗?怎么部署?
A:当然可以!常用方式:
- 本地开发:
uvicorn - 生产环境:
gunicorn + uvicorn工作模式 - 云服务:部署到 Vercel、Render、Railway、阿里云函数计算等
Q4:和 Go 相比,FastAPI 够快吗?
A:根据 TechEmpower 基准测试,FastAPI 性能约为 Go 框架(如 Gin)的 60%~80%,但远超 Flask/Django。对于 90% 的业务场景,完全够用。而且 Python 开发效率高,上线更快。
我当初面试时,面试官看到我用 FastAPI 做了一个高并发日志收集服务,直接问:“你考虑过用 Go 重写吗?” 我回答:“目前 QPS 2000,CPU 占用不到 30%,没必要过早优化。” —— 工具服务于业务,不是炫技。
七、学习建议与下一步
✅ 你现在应该掌握的:
- 创建 FastAPI 应用
- 定义 GET/POST 接口
- 使用路径参数、查询参数、请求体
- 用 Pydantic 做数据校验
- 查看自动生成的 API 文档
🔜 下一步学习路径:
连接真实数据库
→ 学习SQLAlchemy或Tortoise-ORM添加用户认证
→ 了解OAuth2、JWT(FastAPI 官方教程有详细例子)写单元测试
→ 用pytest测试你的 API对比学习 Go
→ 当你熟悉后端逻辑后,用 Go 的 Gin 框架重写这个 Todo 项目,感受差异
📌 简历技巧
在简历中不要只写“使用 FastAPI 开发后端”。要写成:
个人项目:Todo API 服务
- 使用 FastAPI 构建 RESTful API,支持完整 CRUD 操作
- 基于 Pydantic 实现数据校验,错误率降低 90%
- 自动生成 Swagger 文档,提升前后端协作效率
- 部署至 Render,日均请求 500+,可用性 99.9%
这样的描述,HR 和技术面试官都会眼前一亮。
结语
FastAPI 是我见过对新手最友好的后端框架之一。它没有 Django 那么重,又比 Flask 更现代化。更重要的是,它能让你快速获得正反馈——写几行代码,立刻看到效果,这正是坚持学习的关键。
我当初学的时候,也是从一个 Hello World 开始,一步步做到支撑百万级请求的微服务。你也可以。
现在,关掉这篇文章,打开你的编辑器,敲下第一行代码吧:
from fastapi import FastAPI
app = FastAPI()
你的后端之旅,就此开始。

评论 0