为什么文科生也能轻松上手 FastAPI?一篇零基础后端入门指南
大家好,我是一个从中文系转行做后端开发的“野生程序员”。当初学编程时,面对满屏的术语和复杂的框架文档,我一度怀疑自己是不是选错了路。但后来我发现,很多技术其实没那么难,关键在于有没有人用你能听懂的方式讲清楚。
今天我就用自己踩过的坑、总结的经验,带你从零开始认识 FastAPI —— 一个让 Python 写后端像写作文一样自然的现代框架。无论你是文科生、设计师,还是完全没碰过代码的小白,只要愿意动手,这篇教程都能让你跑通第一个 API。
一、FastAPI 是什么?它能做什么?
简单说,FastAPI 是一个用 Python 写 Web 后端的工具。你可以把它想象成“快递中转站”:前端(比如网页、App)发来请求(比如“我要查用户信息”),FastAPI 接收这个请求,处理数据,再把结果送回去。
它特别适合做:
- API 接口(供 App、小程序调用)
- 内部系统后台
- 快速原型开发
- 甚至配合爬虫做数据服务
我当初学的时候,最怕听到“RESTful”“异步”这种词。其实你不用一开始就懂——先跑起来,再慢慢理解。
二、为什么选 FastAPI 而不是 Flask 或 Django?
| 框架 | 学习难度 | 性能 | 自动生成文档 | 类型提示支持 | 适合场景 |
|---|---|---|---|---|---|
| Flask | ⭐⭐ | 中等 | 需手动配置 | 弱 | 小型项目、教学 |
| Django | ⭐⭐⭐⭐ | 中等 | 需额外插件 | 一般 | 全功能网站(如博客、电商) |
| FastAPI | ⭐⭐⭐ | 高(接近 Go) | 自动生成 | 强(基于 Pydantic) | API 服务、微服务、数据接口 |
FastAPI 的优势很明显:
- 自动生成交互式 API 文档(访问
/docs就能看到) - 性能极强,官方测试显示比 Flask 快 3-5 倍,接近 Go 语言水平
- 类型安全,写代码时就能发现错误,减少线上 bug
- 异步支持原生,适合处理大量并发请求(比如同时响应多个爬虫请求)
有同学在面试题里被问:“FastAPI 和 Go 的性能差距有多大?” 答案是:在 I/O 密集型任务(如数据库查询、调用外部 API)中,FastAPI 凭借异步特性,性能非常接近 Go;但在 CPU 密集型任务中,Go 仍占优。不过对大多数产品来说,FastAPI 完全够用。
三、环境准备:5 分钟搭好开发环境
第一步:安装 Python(3.7+)
去 python.org 下载最新版 Python(建议 3.9 或 3.10)。安装时记得勾选 “Add to PATH”。
验证安装:
python --version
# 应输出类似:Python 3.10.12
第二步:创建虚拟环境(推荐)
虚拟环境能避免不同项目之间的依赖冲突。
# 创建项目文件夹
mkdir my-fastapi-app
cd my-fastapi-app
# 创建虚拟环境(Windows 用 python -m venv venv)
python3 -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
激活后,命令行前缀会变成 (venv),说明成功了。
第三步:安装 FastAPI 和 Uvicorn
Uvicorn 是 FastAPI 的“发动机”,负责运行服务。
pip install fastapi uvicorn[standard]
⚠️ 注意:不要漏掉
[standard],否则可能缺少 WebSocket、HTTPS 等支持。
四、核心概念:用大白话讲清楚
1. 什么是“路由”(Route)?
就像快递单上的地址。比如 /users 表示“用户相关操作”,/products 表示“商品相关操作”。
在 FastAPI 中,用 @app.get("/路径") 来定义:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "欢迎来到我的 API!"}
2. 什么是“请求方法”(GET/POST)?
- GET:获取数据(比如查天气)
- POST:提交数据(比如注册账号)
@app.post("/create-user")
def create_user():
return {"status": "用户创建成功"}
3. 什么是“Pydantic 模型”?
这是 FastAPI 的“数据校验器”。你可以定义“用户数据应该长什么样”,FastAPI 会自动检查传入的数据是否合法。
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
age: int
email: str
@app.post("/users")
def create_user(user: UserCreate):
return {"message": f"你好,{user.name}!"}
如果前端传了个 age: "二十"(字符串),FastAPI 会直接返回错误,不用你手动判断!
五、实战:做一个“产品信息查询”小 API
我们来做一个模拟产品数据库的接口,顺便看看怎么和爬虫结合。
步骤 1:创建 main.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
# 模拟数据库(实际项目用 MySQL/PostgreSQL)
fake_products_db = [
{"id": 1, "name": "iPhone 15", "price": 5999},
{"id": 2, "name": "MacBook Pro", "price": 12999},
{"id": 3, "name": "AirPods", "price": 1299},
]
class Product(BaseModel):
id: int
name: str
price: float
@app.get("/")
def read_root():
return {"welcome": "产品查询 API"}
@app.get("/products", response_model=List[Product])
def get_all_products():
return fake_products_db
@app.get("/products/{product_id}", response_model=Product)
def get_product(product_id: int):
for product in fake_products_db:
if product["id"] == product_id:
return product
return {"error": "产品未找到"}
步骤 2:运行服务
uvicorn main:app --reload
main:app表示:从main.py文件中找app对象--reload表示:代码修改后自动重启(开发时超方便!)
看到类似输出就成功了:
INFO: Uvicorn running on http://127.0.0.1:8000
步骤 3:访问 API
打开浏览器,访问:
http://127.0.0.1:8000→ 看到欢迎信息http://127.0.0.1:8000/products→ 返回所有产品http://127.0.0.1:8000/products/2→ 返回 MacBook Pro
更酷的是,访问 http://127.0.0.1:8000/docs,你会看到自动生成的交互式文档!可以点“Try it out”直接测试接口,连 Postman 都不用装。
六、进阶:让爬虫数据通过 FastAPI 对外提供服务
假设你写了个爬虫,抓取了某电商网站的商品价格。现在你想把这些数据做成 API 给前端用。
场景流程:
- 爬虫定期运行,把数据存入数据库(或 JSON 文件)
- FastAPI 从数据库读取数据,提供
/latest-prices接口 - 前端或 App 调用该接口,展示最新价格
示例代码(简化版):
# 假设爬虫已将数据存入 products.json
import json
from fastapi import FastAPI
app = FastAPI()
@app.get("/latest-prices")
def get_latest_prices():
with open("products.json", "r") as f:
data = json.load(f)
return data
💡 提示:实际项目中,建议用数据库(如 SQLite、PostgreSQL)代替 JSON 文件,避免并发读写问题。
七、新手常见问题 & 避坑指南
Q1:为什么运行报错 “ModuleNotFoundError: No module named 'fastapi'”?
原因:没在虚拟环境中安装,或者没激活虚拟环境。
解决:
- 确保已执行
pip install fastapi uvicorn[standard] - 确保已激活虚拟环境(命令行有
(venv)前缀)
Q2:为什么 POST 请求收不到数据?
原因:前端没发 JSON,或者 FastAPI 没定义 Pydantic 模型。
正确做法:
- 前端发送
Content-Type: application/json - 后端用
BaseModel接收
class Item(BaseModel):
name: str
price: float
@app.post("/items")
def create_item(item: Item):
return item
Q3:如何部署到服务器?
本地开发用 uvicorn,生产环境建议用:
- Gunicorn + Uvicorn Worker(Linux 服务器)
- Docker 容器化
- 云平台(如 Vercel、Render、阿里云函数计算)
我当初第一次部署时,在 Windows 上折腾 Nginx,结果发现 Linux 才是后端的主场……建议新手直接用云平台的一键部署。
八、下一步学习建议
FastAPI 只是起点,后端开发还有很长的路。但别慌,按这个顺序走:
巩固基础
- 学习 HTTP 协议(GET/POST/状态码)
- 理解 JSON 格式
- 练习写更多 Pydantic 模型
连接真实数据库
- 用 SQLAlchemy 或 TortoiseORM 操作 SQLite/MySQL
- 实现增删改查(CRUD)
加入用户认证
- 学习 JWT 登录
- 用 OAuth2 保护接口
对接真实爬虫
- 用 Scrapy 或 requests 写爬虫
- 把数据存入数据库,通过 FastAPI 提供 API
准备面试题
常见问题包括:- FastAPI 为什么快?(异步 + Starlette + Pydantic)
- 如何处理异常?(用
@app.exception_handler) - 和 Go 写的 API 有什么区别?(性能、生态、开发效率)
结语:你的第一个 API 已经诞生
恭喜你!你已经完成了从“零”到“能跑”的跨越。我当初写完第一个 FastAPI 接口时,激动得截图发朋友圈——虽然只是返回了一行 "Hello World"。
记住:所有复杂的系统,都是从一行代码开始的。
FastAPI 不仅是一个工具,更是你进入后端世界的门票。无论是做产品后台、数据服务,还是为爬虫提供 API 接口,它都能让你事半功倍。
现在,打开你的编辑器,敲下那几行代码吧。你的第一个 API,正在等待被世界调用。
作者注:本文所有代码均可在 GitHub 找到开源示例。如果你是文科转码者,欢迎留言交流——我们都曾站在同样的起点。

评论 0