FastAPI入门:Python后端开发新手指南
大家好,我是工作5年的后端开发工程师。这几年带过不少新人,也面试过上百位求职者。我发现很多想转行做后端开发的朋友,尤其是零基础的同学,常常卡在“不知道从哪开始”这一步。今天我就用最通俗的方式,手把手带你入门 FastAPI ——一个用 Python 写 Web 接口的现代框架。
为什么选 FastAPI?因为它上手快、文档清晰、性能强,而且现在很多公司(尤其是初创产品团队)都在用它快速搭建后端服务。无论你是想做出自己的小产品,还是准备求职面试,掌握 FastAPI 都是一个高性价比的选择。
我当初学的时候,花了好几天才搞明白“路由”“请求”“响应”这些词到底是什么意思。所以这篇文章,我会用案例驱动的方式,让你边写代码边理解概念,不讲空话。
一、FastAPI 是什么?能用来做什么?
简单说:FastAPI 是一个用 Python 编写的 Web 框架,专门用来开发 API(应用程序接口)。
- API 是什么?你可以把它想象成餐厅的“点菜单”。前端(比如手机 App 或网页)告诉后端“我要一份牛肉面”,后端就做好了回传数据。这个“点单 + 上菜”的过程,就是通过 API 完成的。
- FastAPI 的优势:
- 自动生成功能强大的文档(访问
/docs就能看到) - 支持异步编程(处理大量请求更快)
- 类型提示友好(写代码时就能发现错误)
- 学习曲线平缓,适合新手
- 自动生成功能强大的文档(访问
✅ 关键词关联:
- 产品:你可以用 FastAPI 快速做出 MVP(最小可行产品)的后端,比如用户注册、文章发布等核心功能。
- Python:整个框架基于 Python,语法简洁,社区资源丰富。
- 求职:掌握 FastAPI 是很多初级后端岗位的加分项,尤其在中小厂或创业公司。
二、环境准备:5 分钟搭好开发环境
我们用最标准的方式安装,避免后续踩坑。
步骤 1:确保安装了 Python(3.7+)
打开终端(Mac/Linux)或命令提示符(Windows),输入:
python --version
# 或
python3 --version
如果显示 Python 3.7 及以上版本,就 OK。如果没有,请先去 python.org 下载安装。
步骤 2:创建虚拟环境(强烈推荐!)
虚拟环境可以隔离项目依赖,避免不同项目之间的包冲突。
# 创建名为 fastapi_env 的虚拟环境
python -m venv fastapi_env
# 激活虚拟环境
# Windows:
fastapi_env\Scripts\activate
# Mac/Linux:
source fastapi_env/bin/activate
激活后,命令行前面会出现 (fastapi_env),说明你已经在虚拟环境中了。
步骤 3:安装 FastAPI 和 Uvicorn
Uvicorn 是一个 ASGI 服务器,用来运行 FastAPI 应用。
pip install fastapi uvicorn[standard]
💡 避坑提示:一定要加
[standard],否则静态文件和 WebSocket 支持会缺失!
验证安装
新建一个文件 main.py,写入以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello, FastAPI!"}
然后在终端运行:
uvicorn main:app --reload
main是文件名(main.py)app是代码中创建的 FastAPI 实例--reload表示代码修改后自动重启(开发时超有用!)
看到类似输出就成功了:
INFO: Uvicorn running on http://127.0.0.1:8000
打开浏览器访问 http://127.0.0.1:8000,你会看到:
{"message": "Hello, FastAPI!"}
再访问 http://127.0.0.1:8000/docs,哇!自动生成的交互式文档出现了!
三、核心概念:用最简单的语言讲清楚
1. 路由(Route)
路由就是 URL 路径。比如 /users、/posts/1。
在 FastAPI 中,用装饰器 @app.get()、@app.post() 等来定义。
@app.get("/hello")
def say_hello():
return {"greeting": "Hi there!"}
访问 /hello 就会触发 say_hello 函数。
2. 请求方法(HTTP Methods)
| 方法 | 用途 | FastAPI 装饰器 |
|---|---|---|
| GET | 获取数据 | @app.get() |
| POST | 创建数据 | @app.post() |
| PUT | 更新数据 | @app.put() |
| DELETE | 删除数据 | @app.delete() |
3. 路径参数 vs 查询参数
- 路径参数:写在 URL 路径里,比如
/users/123中的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}
访问:
/items/42→ 返回{"item_id": 42}/search?q=fastapi→ 返回{"query": "fastapi"}
⚠️ 注意:FastAPI 会自动校验类型!如果你传
/items/abc,它会直接返回错误,告诉你“必须是整数”。
4. 请求体(Request Body)
当你要发送复杂数据(比如用户注册信息),通常用 JSON 格式放在请求体中。
FastAPI 用 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 或文档页面的 Try it out)发送 POST 请求:
{
"name": "Alice",
"email": "alice@example.com",
"age": 28
}
FastAPI 会自动验证字段是否存在、类型是否正确!
四、实战项目:做一个简单的“待办事项(Todo)”API
我们要实现以下功能:
- 查看所有任务
- 添加新任务
- 根据 ID 查看单个任务
第 1 步:定义数据模型
新建 main.py(覆盖之前的):
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
# 模拟数据库(实际项目用数据库,这里简化)
todos = []
class TodoItem(BaseModel):
id: int
title: str
completed: bool = False
第 2 步:实现接口
# 获取所有任务
@app.get("/todos", response_model=List[TodoItem])
def get_todos():
return todos
# 创建新任务
@app.post("/todos", response_model=TodoItem)
def create_todo(todo: TodoItem):
todos.append(todo)
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
return {"error": "Not found"}
第 3 步:运行并测试
uvicorn main:app --reload
打开 http://127.0.0.1:8000/docs,你会看到三个接口。
点击 POST /todos → Try it out → 输入:
{
"id": 1,
"title": "学习 FastAPI",
"completed": false
}
点击 Execute,返回成功!
再点 GET /todos,就能看到刚添加的任务。
✅ 这就是一个最简产品原型!虽然数据存在内存里(重启就没了),但逻辑完整,足以展示你的能力。
五、新手常见问题解答(FAQ)
Q1:为什么我的代码改了没生效?
检查是否加了 --reload 参数。如果没有,每次改代码都要手动重启服务器。
Q2:路径参数和查询参数怎么选?
- 如果是资源的唯一标识(如用户ID、文章ID),用路径参数:
/users/123 - 如果是过滤、搜索、分页等可选条件,用查询参数:
/users?role=admin&page=2
Q3:怎么连接真实数据库?
FastAPI 本身不包含数据库,但可以搭配 SQLAlchemy、Tortoise ORM 等。建议先掌握基础 API,再学数据库集成。
Q4:部署上线怎么办?
本地开发用 uvicorn,生产环境建议用:
- Gunicorn + Uvicorn Worker
- Docker 容器化
- 部署到云平台(如 Vercel、Render、阿里云)
初期不必深究,先做出能跑的功能更重要。
Q5:FastAPI 和 Flask 有什么区别?
| 特性 | FastAPI | Flask |
|---|---|---|
| 性能 | 更高(支持异步) | 一般 |
| 自动文档 | ✅ 内置 Swagger UI | ❌ 需要额外插件 |
| 类型提示 | 原生支持 | 支持但非强制 |
| 学习难度 | 略高(需了解 Pydantic) | 更简单 |
建议:如果你是新手且目标是做 API,直接学 FastAPI;如果想深入 Web 原理,可以先学 Flask。
六、学习建议:下一步怎么走?
1. 巩固基础
- 多写几个小 API:用户管理、博客文章、天气查询
- 尝试不同的 HTTP 方法和状态码(比如 404、422)
2. 加入数据库
- 学习 SQLAlchemy + SQLite(轻量,无需安装)
- 实现真正的增删改查(CRUD)
3. 学习认证与授权
- 用
OAuth2实现登录 - 生成 JWT Token 保护接口
4. 部署你的第一个产品
- 用免费平台(如 Render)部署
- 绑定域名,让朋友也能访问
5. 为求职做准备
- 在 GitHub 上开源你的项目
- 写 README 说明功能和技术栈
- 面试时可以说:“我用 FastAPI 做了一个 Todo 应用,支持 RESTful API 和自动文档”
🌟 最后的话:我当初也是从一行
print("Hello World")开始的。不要怕犯错,每一个 bug 都是你成长的阶梯。FastAPI 是你进入后端世界的绝佳入口,坚持下去,你很快就能做出属于自己的产品,甚至拿到心仪 offer!
动手时间到了!现在就打开编辑器,敲下第一行 FastAPI 代码吧。你离“后端开发者”只差一个 uvicorn 命令的距离。

评论 0