一、FastAPI 是什么?
FastAPI 是一款基于 Python 3.8+ 开发的现代化、高性能、类型友好的 Web 接口框架,专门用于快速构建 RESTful API 服务。
它基于 Starlette(高性能异步 Web 底层)和 Pydantic(数据校验库)封装,兼顾了Flask 的极简易用性 和Django 的工程规范性,同时弥补了传统 Python Web 框架性能弱、无原生校验、文档繁琐的短板,是目前 AI 后端、微服务、轻量化接口项目的首选框架。
不同于老旧框架,FastAPI 从设计之初就适配异步编程、类型提示、自动化接口测试,完全贴合现代后端开发、微服务、大模型应用开发的技术需求。
二、FastAPI 核心优势(碾压传统框架)
1. 极致高性能,媲美 Go/Node.js
依托 Starlette 异步底层,支持高并发请求,官方压测数据远超 Flask、Django,性能接近 Go、Node.js 专业后端框架。非常适合高并发接口、AI 推理接口、实时数据服务场景。
2. 原生类型校验,彻底杜绝参数异常
基于 Python 类型注解 + Pydantic 实现全自动数据校验,无需手写繁琐的参数判断。自动校验参数类型、长度、范围、必填项,参数错误直接返回标准化报错,大幅减少线上 Bug。
3. 零成本自动生成接口文档
项目启动后,默认自带两套交互式接口文档:
/docs:Swagger 可视化文档,支持在线调试接口/redoc:简洁结构化接口说明文档
无需手动编写文档,代码即文档,极大提升前后端协作效率。
4. 极简语法,低学习成本
语法简洁直观,贴近原生 Python,新手可快速上手。同步、异步函数完全兼容,不用改写代码即可实现异步接口开发。
5. 完善的工程生态与兼容性
完美支持 OAuth2 鉴权、JWT 令牌、数据库对接、依赖注入、后台任务、文件上传,生态成熟,可快速落地企业级项目。
三、快速上手:从零搭建第一个 FastAPI 项目
1. 环境安装
仅需安装两个核心依赖,一键部署开发环境:
bash
pip install fastapi uvicorn
uvicorn:FastAPI 专属 ASGI 高性能运行服务器,支持热更新、异步运行。
2. 首个 Hello World 项目
新建 main.py,写入最简代码:
python
from fastapi import FastAPI
# 初始化应用实例
app = FastAPI(title="FastAPI 入门项目", version="1.0")
# 根路径接口
@app.get("/")
def read_root():
return {"message": "Hello FastAPI!高性能 Python 接口框架"}
# 带路径参数的接口
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "query": q}
3. 启动项目
bash
uvicorn main:app --reload
4. 访问服务与接口文档
- 项目地址:
http://127.0.0.1:8000 - 交互式接口调试文档:
http://127.0.0.1:8000/docs - 结构化文档:
http://127.0.0.1:8000/redoc
在 docs 页面可直接在线发送请求、调试参数、查看返回结果,无需 Postman 等第三方工具。
四、FastAPI 核心实战特性
1. 全自动参数校验
通过类型注解直接限定参数类型、必填状态,FastAPI 自动完成校验,参数错误返回标准化提示:
python
@app.get("/user/{user_id}")
def get_user(user_id: int, age: int | None = None, name: str = "默认用户"):
return {"用户ID": user_id, "年龄": age, "昵称": name}
若传入非数字的 user_id,框架会自动拦截并返回报错,无需手动写判断逻辑。
2. Pydantic 模型数据校验(核心利器)
通过 Pydantic 定义数据模型,实现复杂 JSON 请求体的结构化校验,适配后端新增、修改业务场景:
python
from pydantic import BaseModel
# 定义用户数据模型
class User(BaseModel):
username: str
age: int
email: str | None = None
# 接收 JSON 请求体
@app.post("/user/create")
def create_user(user: User):
return {"状态": "创建成功", "用户信息": user.dict()}
3. 同步 / 异步双模式兼容
FastAPI 完全兼容同步、异步函数,无需特殊配置,适配不同业务场景:
python
# 同步接口(适配普通业务)
@app.get("/sync/hello")
def sync_hello():
return {"msg": "同步接口请求成功"}
# 异步接口(适配高并发、IO 阻塞场景)
@app.get("/async/hello")
async def async_hello():
return {"msg": "异步接口请求成功"}
五. FastAPI + SQLAlchemy 数据库集成(ORM)
在后端项目里,几乎所有业务都离不开数据库。SQLAlchemy 是 Python 生态最成熟的 ORM(对象关系映射)库,分为两层:
- SQLAlchemy Core:底层 SQL 构造器;
- SQLAlchemy ORM:对象映射,用 Python 类代表数据库表,不用手写原生 SQL,降低 SQL 注入风险。
FastAPI 官方文档推荐使用 SQLAlchemy 做数据库层,支持 MySQL、PostgreSQL、SQLite 等多种数据库。
1. 安装依赖
python
pip install fastapi uvicorn sqlalchemy pymysql
sqlalchemy:ORM 主体pymysql:mysql 驱动;如果用 PostgreSQL 替换为psycopg2-binary;SQLite 无需额外驱动
2. 数据库连接、模型定义、会话管理(db.py)
python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 修改为你的数据库地址
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:123456@127.0.0.1:3306/fastapi_demo"
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
pool_pre_ping=True
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# ORM数据库模型,映射数据库user表
class DBUser(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(50), unique=True, index=True)
age = Column(Integer, nullable=True)
email = Column(String(100), unique=True)
# 首次运行自动创建数据表
Base.metadata.create_all(bind=engine)
# 依赖项:获取数据库会话
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
3. main.py:路由 + Pydantic + SQLAlchemy 完整业务代码
重点区分两套模型:
- SQLAlchemy Model:数据库表模型(DBUser),用于读写数据库
- Pydantic Schema:接口入参 / 出参模型(UserCreate),用于请求校验、返回序列化
python
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from pydantic import BaseModel
from db import get_db, DBUser
app = FastAPI(title="FastAPI + SQLAlchemy 完整请求链路示例")
# Pydantic 接口入参模型(请求体校验)
class UserCreate(BaseModel):
username: str
age: int | None = None
email: str
# 查询用户接口 GET
@app.get("/user/{user_id}")
def get_user(user_id: int, db: Session = Depends(get_db)):
# SQLAlchemy ORM 查询
db_user = db.query(DBUser).filter(DBUser.id == user_id).first()
if not db_user:
return {"code": 404, "msg": "用户不存在"}
return {"code": 200, "data": db_user}
# 创建用户接口 POST
@app.post("/user")
def create_user(user: UserCreate, db: Session = Depends(get_db)):
# ORM对象
db_user = DBUser(
username=user.username,
age=user.age,
email=user.email
)
db.add(db_user)
db.commit()
db.refresh(db_user)
return {"code": 200, "msg": "创建成功", "data": db_user}
4. 一次 HTTP 请求,从 FastAPI 到 SQLAlchemy 完整链路拆解
以客户端发起POST /user创建用户请求为例,完整执行流程:
- 客户端发送 HTTP 请求
POST /user,JSON body 携带username、age、email。 - FastAPI 接收请求,Pydantic 校验请求体 FastAPI 捕获请求,自动用
UserCreate这个 Pydantic 模型校验 JSON:字段类型、是否缺失。 校验失败 → 直接返回 422 错误,不会走到数据库层,减少无效 DB 访问。 - 执行依赖注入 Depends (get_db) 获取数据库会话 路由函数声明
db: Session = Depends(get_db),FastAPI 自动调用get_db():
- 创建一个全新数据库 Session 会话
yield db将会话对象注入路由函数- 请求处理完成后,自动进入
finally,关闭数据库连接,防止连接泄露。
4.路由函数内部,使用 SQLAlchemy ORM 执行数据库操作
python
db_user = DBUser(username=user.username, age=user.age, email=user.email)
db.add(db_user)
db.commit()
db.refresh(db_user)
db.add():把对象加入 Session 的待提交队列,此时还没有执行 SQLdb.commit():Session 向数据库发起事务,执行 INSERT 语句写入 mysqldb.refresh():从数据库重新查询这条记录,拿到数据库自增生成的 id- 5.构造响应,返回给客户端 ORM 对象直接序列化返回给前端。 请求生命周期结束,触发
finally,执行db.close()释放连接归还连接池。
链路简图:
python
客户端HTTP请求
↓
FastAPI 路由接收 + Pydantic参数校验
↓
Depends(get_db) 创建Session会话
↓
SQLAlchemy ORM(db会话对象)生成SQL,访问数据库
↓
数据库返回结果 → ORM映射成对象
↓
FastAPI封装JSON响应返回客户端
↓
请求结束,自动关闭Session,归还连接池
5. 核心要点说明
-
依赖注入管理 DB 会话
Depends(get_db)是 FastAPI 的依赖注入能力:每个 HTTP 请求分配独立数据库会话,请求完成自动 close,防止连接泄漏。 -
Pydantic 和 SQLAlchemy 模型分离 这是工程规范:数据库模型只管表结构;Pydantic 模型负责 API 参数校验、返回字段过滤(可以隐藏密码等敏感字段),不要混用。
-
事务
db.commit()提交;出现异常使用db.rollback()回滚。适合支付、订单这类强一致性业务。 -
查询写法示例
python# where 查询 db.query(DBUser).filter(DBUser.username == "zhangsan").first() # 分页查询 db.query(DBUser).offset(0).limit(10).all()
六、FastAPI 适用场景与技术选型对比
✅ 最适合的场景
- AI 项目后端接口(大模型调用、知识库、Agent 服务)
- 轻量化微服务、高并发接口服务
- 前后端分离项目后端
- 快速迭代的创业项目、小型企业服务
❌ 不适合的场景
- 重度传统网站渲染(优先 Django)
- 超大型、超复杂单体传统项目
三大 Python Web 框架对比
- Flask:极简但无原生校验、无自动文档、性能一般,适合极简小项目
- Django:功能齐全、重框架、学习成本高,适合传统大型网站
- FastAPI:高性能、现代化、零文档成本、类型安全,适配现代所有接口开发场景
七、总结:为什么现在首选 FastAPI?
在当下 Python 后端、AI 应用开发场景中,FastAPI 已经成为新一代标杆框架 。它解决了传统 Python Web 框架性能差、开发繁琐、文档混乱、参数不安全的核心痛点,兼具易用性、高性能、规范性、现代化四大优势。
对于开发者而言,FastAPI 能够大幅提升开发效率、减少线上 Bug、降低前后端协作成本;对于企业而言,轻量化、高并发的特性,完美适配微服务、AI 服务、轻量化业务的落地需求,是目前性价比最高的 Python Web 开发框架。