FastAPI 学习教程 · 第1部分

FastAPI 入门与基本路由

💡 本部分目标:搭建你的第一个 FastAPI 应用,理解什么是路由,并学会处理路径参数。


✅ 一、什么是 FastAPI?

FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建 API。它具有以下优点:

  • 极快:性能接近 Node.js 和 Go(得益于 Starlette 和 Pydantic)
  • 自动生成文档:自动提供交互式 API 文档(Swagger UI 和 ReDoc)
  • 类型提示友好:基于 Python 类型注解(Type Hints),代码更清晰、更安全
  • 异步支持 :原生支持 async/await
  • 易于学习:如果你会写 Python 函数,就能写 FastAPI 接口

📌 官网:https://fastapi.tiangolo.com/


✅ 二、安装 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

打开浏览器,访问:

👉 http://127.0.0.1:8000

你应该看到:

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/5item_id 是整数 5
  • 如果你访问 /items/abc → FastAPI 会自动返回 422 错误 (因为 abc 不是整数)

✅ 这就是 FastAPI 的强大之处:自动验证 + 类型转换


✅ 六、探索自动生成的 API 文档

FastAPI 最酷的功能之一:无需额外配置,自动生成交互式文档

访问以下两个地址:

  1. Swagger UI (默认)

    👉 http://127.0.0.1:8000/docs

    • 可以点击"Try it out"直接测试 API
    • 查看请求格式、响应示例、错误码等
  2. ReDoc (另一种文档风格)

    👉 http://127.0.0.1:8000/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. 任务1 :添加一个新路由 /ping,返回 {"status": "ok"}
  2. 任务2 :添加一个带路径参数的路由 /books/{book_id},要求 book_id 是整数,返回书的信息(如 {"book_id": 101, "title": "Python入门"})。
  3. 任务3 :访问 /docs,尝试调用你刚写的接口,观察请求和响应。
  4. 挑战任务 :如果用户输入非数字的 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/55 是路径的一部分
  • 查询参数:/items/?q=phoneq=phone? 后面(下一部分会学)

🎯 小结

在本部分,你学会了:

  • 安装 FastAPI 和 Uvicorn
  • 创建并运行第一个 FastAPI 应用
  • 定义 GET 路由
  • 使用路径参数并享受自动类型验证
  • 探索自动生成的 API 文档
相关推荐
星火开发设计2 小时前
C++ multimap 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
好奇龙猫2 小时前
【大学院-筆記試験練習:线性代数和数据结构(6)】
学习
●VON2 小时前
使用 OpenAgents 搭建基于智谱 GLM 的本地智能体(Agent)
学习·安全·制造·智能体·von
丝斯20112 小时前
AI学习笔记整理(45)——大模型数据读取技术与模型部署
人工智能·笔记·学习
mpHH2 小时前
postgresql 执行器中readme的翻译
数据库·学习·postgresql
风送雨2 小时前
FastAPI 学习教程 · 第2部分
学习·fastapi
石像鬼₧魂石2 小时前
3306 端口(MySQL 数据库)渗透测试全流程学习总结
数据库·学习·mysql
Main. 242 小时前
从0到1学习Qt -- Qt3D入门
开发语言·qt·学习
weixin_462446232 小时前
Python+React 专为儿童打造的汉字学习平台:从学前到小学的智能汉字教育解决方案
python·学习·react.js