FastAPI 入门与基本路由
💡 本部分目标:搭建你的第一个 FastAPI 应用,理解什么是路由,并学会处理路径参数。
✅ 一、什么是 FastAPI?
FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建 API。它具有以下优点:
- 极快:性能接近 Node.js 和 Go(得益于 Starlette 和 Pydantic)
- 自动生成文档:自动提供交互式 API 文档(Swagger UI 和 ReDoc)
- 类型提示友好:基于 Python 类型注解(Type Hints),代码更清晰、更安全
- 异步支持 :原生支持
async/await - 易于学习:如果你会写 Python 函数,就能写 FastAPI 接口
✅ 二、安装 FastAPI 和 Uvicorn
FastAPI 本身不包含服务器,需要搭配 ASGI 服务器运行。最常用的是 Uvicorn。
步骤 1:确保已安装 Python(建议 3.8+)
在终端运行:
bash
python --version
# 或
python3 --version
步骤 2:创建虚拟环境(推荐)
bash
# 创建虚拟环境(可选但推荐)
python -m venv fastapi-env
# 激活虚拟环境
# Windows:
fastapi-env\Scripts\activate
# macOS / Linux:
source fastapi-env/bin/activate
步骤 3:安装 FastAPI 和 Uvicorn
bash
pip install fastapi uvicorn[standard]
🔍
uvicorn[standard]包含了生产级依赖(如httptools),比基础版更快。
✅ 三、创建你的第一个 FastAPI 应用
步骤 1:新建一个 Python 文件
创建文件 main.py,内容如下:
python
# main.py
from fastapi import FastAPI
# 创建 FastAPI 应用实例
app = FastAPI()
# 定义一个 GET 路由
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
步骤 2:运行应用
在终端执行:
bash
uvicorn main:app --reload
main:Python 文件名(main.py)app:文件中 FastAPI 实例的变量名--reload:开发模式,代码修改后自动重启(仅用于开发!)
你会看到类似输出:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [xxxx]
INFO: Started server process [xxxx]
步骤 3:访问你的 API
打开浏览器,访问:
你应该看到:
json
{
"message": "Hello, FastAPI!"
}
🎉 恭喜!你已经成功运行了第一个 FastAPI 应用!
✅ 四、理解"路由"(Route / Endpoint)
在 FastAPI 中,路由 是指一个 URL 路径(如 /items/5)加上 HTTP 方法(如 GET、POST)。
使用装饰器定义路由,例如:
@app.get()→ 处理 GET 请求@app.post()→ 处理 POST 请求@app.put(),@app.delete()等也支持
示例:添加多个路由
更新 main.py:
python
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/hello")
def say_hello():
return {"greeting": "Hi there!"}
@app.get("/users/me")
def read_current_user():
return {"user_id": "current_user"}
现在你可以访问:
✅ 五、路径参数(Path Parameters)
很多时候,URL 中包含动态部分,比如 /items/3 中的 3 是商品 ID。
FastAPI 通过函数参数自动提取路径中的值。
示例:带路径参数的路由
python
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
🔑 注意:
{item_id}是路径参数,函数参数item_id: int声明了它的类型。
类型自动转换与验证
- 如果你访问
/items/5→item_id是整数5 - 如果你访问
/items/abc→ FastAPI 会自动返回 422 错误 (因为abc不是整数)
✅ 这就是 FastAPI 的强大之处:自动验证 + 类型转换!
✅ 六、探索自动生成的 API 文档
FastAPI 最酷的功能之一:无需额外配置,自动生成交互式文档!
访问以下两个地址:
-
Swagger UI (默认)
- 可以点击"Try it out"直接测试 API
- 查看请求格式、响应示例、错误码等
-
ReDoc (另一种文档风格)
💡 这些文档是根据你的代码自动生成的,无需手写!
✅ 七、完整示例代码(推荐保存为 main.py)
python
# main.py
from fastapi import FastAPI
app = FastAPI(
title="我的第一个 FastAPI 应用",
description="这是第1部分教程的示例项目",
version="1.0.0"
)
@app.get("/")
def read_root():
return {"message": "欢迎来到 FastAPI 世界!"}
@app.get("/hello")
def greet():
return {"text": "你好,开发者!"}
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id, "name": f"商品 {item_id}"}
@app.get("/users/{username}")
def read_user(username: str):
return {"username": username, "profile": "普通用户"}
运行后,试试这些 URL:
并在 /docs 中点击"Try it out"体验交互式测试!
✅ 八、练习任务(动手实践)
🧠 学编程最重要的是动手!请完成以下任务:
- 任务1 :添加一个新路由
/ping,返回{"status": "ok"}。 - 任务2 :添加一个带路径参数的路由
/books/{book_id},要求book_id是整数,返回书的信息(如{"book_id": 101, "title": "Python入门"})。 - 任务3 :访问
/docs,尝试调用你刚写的接口,观察请求和响应。 - 挑战任务 :如果用户输入非数字的
book_id(如/books/abc),看看 FastAPI 返回什么?理解错误信息。
✅ 九、常见问题解答(FAQ)
Q1:为什么用 uvicorn main:app 而不是 python main.py?
A:FastAPI 应用是一个 ASGI 应用,不能直接用 python 运行,必须通过 ASGI 服务器(如 Uvicorn)启动。
Q2:--reload 是什么?能用于生产吗?
A:--reload 是开发时自动重载代码的功能,绝对不要在生产环境使用,因为它有安全和性能风险。
Q3:路径参数和查询参数有什么区别?
A:
- 路径参数:
/items/5→5是路径的一部分 - 查询参数:
/items/?q=phone→q=phone在?后面(下一部分会学)
🎯 小结
在本部分,你学会了:
- 安装 FastAPI 和 Uvicorn
- 创建并运行第一个 FastAPI 应用
- 定义 GET 路由
- 使用路径参数并享受自动类型验证
- 探索自动生成的 API 文档