为什么我推荐 Python 新手从 FastAPI 开始后端之旅?

Merge前先祈祷
2026-01-04 03:45
阅读 2531

大家好,我是掘金上常写入门教程的全栈工程师。最近有好几个零基础的同学问我:“想学后端,Python 和 Go 选哪个?”“Flask、Django、FastAPI 到底有什么区别?”

我当初学后端时也踩过不少坑——装环境装到崩溃、文档看不懂、跑个 “Hello World” 都报错。所以今天,我想用最直白的语言,带你从零开始上手 FastAPI,并顺带聊聊它和 Flask、Django 甚至 Go 的对比。无论你是完全没写过后端的新手,还是只会前端想拓展技能栈的同学,这篇指南都适合你。


一、FastAPI 是什么?能用来做什么?

FastAPI 是一个用 Python 编写的现代 Web 框架,专为构建 高性能 API(应用程序接口) 而生。简单说,它帮你快速搭建一个能接收请求、处理数据、返回结果的“服务”。

比如:

  • 用户在手机 App 上点“登录”,App 会向你的 FastAPI 服务发一个请求;
  • 你的服务验证用户名密码,然后返回“登录成功”或“密码错误”。

FastAPI 的优势在于:快、简单、自动生成文档、类型安全。它底层基于 Starlette(异步框架)和 Pydantic(数据校验库),性能甚至接近 Go 写的服务!


二、FastAPI vs 其他后端技术:怎么选?

很多新手纠结选哪个框架。下面是我整理的对比表,帮你理清思路:

框架/语言 学习难度 性能 自动生成文档 异步支持 适合场景
FastAPI (Python) ⭐⭐ ⭐⭐⭐⭐ ✅(Swagger + ReDoc) 快速开发 API、微服务、机器学习后端
Flask (Python) ⭐⭐ ❌(需手动集成) 有限 小型项目、教学、原型验证
Django (Python) ⭐⭐⭐ ⭐⭐ ❌(需 DRF 扩展) 有限 全功能网站(含后台、用户系统等)
Go (Gin/Echo) ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 需第三方库 高并发、云原生、微服务

💡 我的开发心得:如果你是 Python 初学者,又只想做 API(不涉及复杂网页),FastAPI 是最佳起点。它语法简洁,错误提示友好,还能自动给你生成漂亮的 API 文档页面,调试起来特别爽。

至于 Go?它确实快,但对新手门槛高(要理解 goroutine、channel 等概念)。我建议:先用 FastAPI 做出东西,建立信心;等有经验了再挑战 Go


三、环境准备:5 分钟搭好开发环境

步骤 1:安装 Python(3.7+)

python.org 下载最新版。安装时记得勾选 “Add to PATH”

验证安装:

python --version
# 应输出类似:Python 3.11.5

步骤 2:创建虚拟环境(推荐!)

虚拟环境能隔离项目依赖,避免“这个项目装了 A 包,那个项目装了 B 包,结果冲突了”的悲剧。

# 创建名为 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

🛑 避坑指南:不要用 pip install fastapi[all]!新手不需要额外依赖,装基础版就行。


四、核心概念:用最简单的例子讲清楚

1. 最小可运行程序

新建文件 main.py,输入以下代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
    return {"message": "你好,FastAPI!"}

运行服务:

uvicorn main:app --reload
  • main:app 表示:从 main.py 文件中导入 app 对象
  • --reload 表示:代码修改后自动重启(开发时超有用!)

打开浏览器访问 http://127.0.0.1:8000,你会看到:

{"message": "你好,FastAPI!"}

2. 路径参数 & 查询参数

  • 路径参数:出现在 URL 路径中,如 /users/123
  • 查询参数:出现在 ? 后面,如 /search?q=python
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

访问 /items/42?q=hello,返回:

{"item_id": 42, "q": "hello"}

🔍 注意:item_id: int 声明了类型,FastAPI 会自动校验。如果传字符串 "abc",会直接返回 422 错误!

3. 请求体(JSON 数据)

当客户端发送 JSON 数据(比如注册用户信息),用 Pydantic 模型定义结构:

from pydantic import BaseModel

class UserCreate(BaseModel):
    name: str
    age: int

@app.post("/users/")
def create_user(user: UserCreate):
    return {"name": user.name, "age_in_10_years": user.age + 10}

用工具(如 Postman 或 curl)发送 POST 请求:

{
  "name": "小明",
  "age": 18
}

返回:

{"name": "小明", "age_in_10_years": 28}

五、实战:做一个简单的“待办事项”API

我们来做一个能增删查的 Todo 列表,只用 30 行代码!

# main.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

class Todo(BaseModel):
    id: int
    title: str
    done: bool = False

# 模拟数据库(实际项目用数据库)
todos = [
    Todo(id=1, title="学习 FastAPI"),
    Todo(id=2, title="写教程", done=True)
]

@app.get("/todos/", response_model=List[Todo])
def get_todos():
    return todos

@app.post("/todos/", response_model=Todo)
def create_todo(todo: Todo):
    todos.append(todo)
    return todo

@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int):
    global todos
    todos = [t for t in todos if t.id != todo_id]
    return {"message": "删除成功"}

运行后,你可以:

  • GET /todos/ → 查看所有任务
  • POST /todos/ → 添加新任务(传 JSON)
  • DELETE /todos/1 → 删除 ID 为 1 的任务

💡 重点response_model=List[Todo] 告诉 FastAPI 返回的数据结构,它会自动过滤掉多余字段,并生成文档!


六、新手常见问题解答

Q1:为什么我改了代码,页面没更新?

A:确认是否加了 --reload 参数。如果没有,Ctrl+C 停止服务,重新运行 uvicorn main:app --reload

Q2:如何查看自动生成的 API 文档?

A:访问:

  • http://127.0.0.1:8000/docs → Swagger UI(可交互测试)
  • http://127.0.0.1:8000/redoc → ReDoc(更美观)

Q3:FastAPI 能连接数据库吗?

A:当然!常用组合:

  • SQLite / PostgreSQL + SQLAlchemy(同步)
  • PostgreSQL + asyncpg(异步)

但新手建议先用内存列表(如上面的 todos),等熟悉后再加数据库。

Q4:和 Flask 相比,FastAPI 难吗?

A:语法几乎一样简单!但 FastAPI 多了类型提示和自动校验,反而减少 bug。我当初从 Flask 转 FastAPI,只花了一天就适应了。


七、下一步学习建议

  1. 深入学习

    • 官方文档(英文好,中文也有):fastapi.tiangolo.com
    • 重点看:依赖注入、中间件、异常处理
  2. 进阶项目

    • 加 JWT 用户认证
    • 连接 SQLite 数据库
    • 用 Docker 容器化部署
  3. 对比学习

    • 用 Flask 实现同样功能,感受差异
    • 了解 Go 的 Gin 框架,看看“快”到底多快(比如压测对比)

🌟 最后的心得:技术没有绝对好坏,只有合不合适。FastAPI 让我快速交付产品,Go 让我在高并发场景游刃有余。先做出东西,再追求极致——这是我对所有新手的忠告。


现在,打开你的编辑器,敲下第一行 from fastapi import FastAPI 吧!你离写出第一个 API,只差一次 uvicorn 命令。

评论 0

最热最新
暂无评论
Merge前先祈祷Lv.1
0
影响力
0
文章
0
粉丝