FastAPI入门:Python后端开发新手指南

·宋志强
2025-12-14 23:13
阅读 416

作者:一位维护过多个开源项目的后端工程师,写过数十篇技术文档。本文源于我当初带实习生时反复讲解的基础内容——我希望你能少走我当年踩过的坑。

为什么我要写这篇教程?

最近几年,越来越多刚学完 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

  1. 运行服务:uvicorn main:app --reload
  2. 打开 http://127.0.0.1:8000/docs
  3. 在网页上点击 “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 文档

🔜 下一步学习路径:

  1. 连接真实数据库
    → 学习 SQLAlchemyTortoise-ORM

  2. 添加用户认证
    → 了解 OAuth2JWT(FastAPI 官方教程有详细例子)

  3. 写单元测试
    → 用 pytest 测试你的 API

  4. 部署到线上
    → 尝试免费平台如 RenderRailway

  5. 对比学习 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

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝