Build a REST API with FastAPI: Complete Python Tutorial (2026)(2026-07-09)
FastAPI 已成为 Python 生态中最受欢迎的 Web 框架之一——它在 2026 年依然保持强劲增长,GitHub 星标突破 85,000,并被 Uber、Netflix 等公司用于高并发服务。这篇文章将带你从零构建一个实用的 REST API,涵盖核心概念、实战案例和性能技巧,即使是初学者也能快速上手。
为什么选择 FastAPI?
速度与易用性的完美平衡
- 性能优势:基于 Starlette + Pydantic,自动支持异步请求(asyncio),吞吐量比 Flask 高 40%
- 自动文档:无需额外配置,直接生成 Swagger UI 和 ReDoc 交互式文档
- 数据验证:Pydantic 模型自动校验请求数据,错误提示清晰,减少 70% 的调试时间
小数据:根据 2025 年 TechEmpower 基准测试,FastAPI 在 JSON 序列化场景下排名 Python 框架第一,吞吐量达 12,000+ req/s(单核)。
实战:构建“图书管理”API
我们将创建一个轻量级的图书管理系统,支持 CRUD(增删改查)操作。假设你已安装 Python 3.10+,执行 pip install fastapi uvicorn。
1. 定义数据模型与路由
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI(title="图书管理 API", version="1.0")
# 模拟数据库
books_db = []
class Book(BaseModel):
id: int
title: str
author: str
year: int
@app.get("/books", response_model=List[Book])
async def get_books():
"""获取所有图书"""
return books_db
@app.post("/books", response_model=Book)
async def create_book(book: Book):
"""添加新图书"""
# 实用建议:使用列表推导式检查重复 ID
if any(b.id == book.id for b in books_db):
raise HTTPException(status_code=400, detail="图书 ID 已存在")
books_db.append(book)
return book
2. 运行与测试
在终端执行:uvicorn main:app --reload
访问 http://127.0.0.1:8000/docs即可看到 Swagger 文档。尝试用 POST 方法添加一本书:
{
"id": 1,
"title": "Python 网络编程",
"author": "张明",
"year": 2026
}
进阶功能与实用建议
三级标题:错误处理与状态码优化
- 自定义异常:使用
HTTPException处理资源不存在(404)或参数错误(400) - 响应状态码:创建成功返回 201,删除操作返回 204(无内容)
- 案例:当查询不存在的图书时,返回清晰提示:“ID 100 的图书未找到”
三级标题:数据库集成(可选)
生产环境中建议使用 SQLite 或 PostgreSQL。这里给出一个快速原型:
# 使用 SQLAlchemy 2.0 异步驱动
from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine("sqlite+aiosqlite:///./books.db")
提示:用
pytest+httpx编写测试,测试覆盖率建议 >80%
性能调优与部署
- 异步路由:对于 I/O 密集型操作(如数据库查询),始终使用
async def - Gunicorn + Uvicorn:生产部署执行
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app - 缓存策略:对于频繁查询的静态数据,用
functools.lru_cache或 Redis 缓存
行动号召
现在,打开你的终端,用上面 15 行代码启动第一个 FastAPI 服务。把示例中的图书管理系统扩展为“待办事项API”或“用户注册API”,然后部署到 Render 或 Railway 上。你会发现——构建现代 REST API 从未如此简单!
免责声明:本文内容基于 2026 年 FastAPI 0.115.x 版本编写,代码示例仅用于教学目的。实际生产环境应考虑身份认证(JWT)、速率限制、数据库事务等安全措施。作者不对因遵循本文导致的任何直接或间接损失负责。请在充分测试后上线应用。