FastAPI

适合:小白入门 / 老程序员快速掌握 / 企业级团队文档

FastAPI 是一个现代、高性能的 Python Web 框架,基于 Starlette(异步 Web 框架)Pydantic(数据验证) 构建,拥有自动文档、强类型、异步支持等特性。 它的性能接近 Node.js 和 Go,非常适合构建高并发 API 服务。

1. FastAPI 的核心优势(企业级视角)

特性 说明
高性能 基于 async/await,性能接近 Node.js/Go
自动文档 自动生成 Swagger UI / ReDoc(官方教程强调)
强类型 基于 Python 类型提示,自动校验请求数据
异步支持 原生 async/await
依赖注入(DI) 内置 DI 系统,适合大型项目
可扩展性强 基于 Starlette,可用中间件、事件、WebSocket

2. 快速上手(Hello World)

创建 main.py

复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def index():
    return {"message": "Hello FastAPI"}

运行(官方教程示例):

复制代码
fastapi dev main.py

自动文档:

  • Swagger UI: http://127.0.0.1:8000/docs

  • ReDoc: http://127.0.0.1:8000/redoc

3. 路由(API 构建基础)

3.1 基础路由

复制代码
@app.get("/users")
def get_users():
    return ["Tom", "Jerry"]

3.2 路径参数

复制代码
@app.get("/users/{user_id}")
def get_user(user_id: int):
    return {"id": user_id}

3.3 查询参数

复制代码
@app.get("/search")
def search(keyword: str, limit: int = 10):
    return {"keyword": keyword, "limit": limit}

4. Pydantic 模型(FastAPI 的灵魂)

Pydantic 用于 数据验证 + 自动文档 + 自动类型转换

复制代码
from pydantic import BaseModel

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

用于 POST 请求:

复制代码
@app.post("/users")
def create_user(user: User):
    return user

5. 异步支持(async/await)

FastAPI 原生支持异步(官方教程强调 async/await 支持):

复制代码
@app.get("/items")
async def get_items():
    return ["a", "b", "c"]

适合:

  • 高并发

  • I/O 密集型(数据库、HTTP 调用)

  • WebSocket

6. 依赖注入(DI)------企业级必备

FastAPI 内置 DI 系统,非常适合大型项目(GitHub 完整课程也包含 DI 章节)。

复制代码
from fastapi import Depends

def get_db():
    db = "db connection"
    return db

@app.get("/items")
def read_items(db = Depends(get_db)):
    return {"db": db}

用途:

  • 数据库连接

  • 权限校验

  • 配置管理

  • 业务服务注入

7. 中间件(Middleware)

复制代码
from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

用途:

  • CORS

  • 日志

  • 鉴权

  • 限流

8. 异常处理(企业级)

复制代码
from fastapi import HTTPException

@app.get("/error")
def error():
    raise HTTPException(status_code=404, detail="Not Found")

自定义异常:

复制代码
from fastapi.responses import JSONResponse

@app.exception_handler(ValueError)
def value_error_handler(request, exc):
    return JSONResponse(status_code=400, content={"error": str(exc)})

9. 数据库集成(SQLAlchemy)

GitHub 完整课程包含数据库集成章节。

复制代码
from sqlalchemy.orm import Session
from fastapi import Depends

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

10. 项目结构(企业级)

复制代码
app/
│── main.py
│── api/
│   ├── users.py
│   ├── auth.py
│── models/
│── schemas/
│── services/
│── core/
│   ├── config.py
│   ├── security.py
│── db/
│   ├── session.py
│   ├── base.py

特点:

  • 路由模块化

  • 数据模型与 Pydantic schema 分离

  • 业务逻辑放在 service 层

  • 配置集中管理

11. 自动文档(Swagger / ReDoc)

FastAPI 自动生成文档(官方教程强调自动文档能力)。

你可以自定义:

复制代码
app = FastAPI(
    title="My API",
    description="企业级 API 文档",
    version="1.0.0"
)

12. 安全(OAuth2 / JWT)

FastAPI 内置 OAuth2 支持。

复制代码
from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/me")
def read_me(token: str = Depends(oauth2_scheme)):
    return {"token": token}

13. 性能优化(企业级)

GitHub 完整课程包含性能优化章节。

  • 使用 Uvicorn + Gunicorn(多 worker)

  • 使用 async/await

  • 数据库连接池

  • 缓存(Redis)

  • 中间件限流

  • Pydantic v2(更快)

14. 部署(生产环境)

推荐架构:

复制代码
Nginx → Gunicorn → UvicornWorker → FastAPI

启动:

复制代码
gunicorn main:app -k uvicorn.workers.UvicornWorker -w 4 -b 0.0.0.0:8000

15. 测试(pytest)

复制代码
from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

def test_index():
    r = client.get("/")
    assert r.status_code == 200

16. 高级功能(官方教程包含大量进阶内容)

  • WebSocket

  • Background Tasks

  • Events(startup/shutdown)

  • Streaming Response

  • File Upload

  • CORS

  • 自定义中间件

  • 异步数据库(SQLModel / Tortoise ORM)

17. 学习路线(结合 GitHub 完整课程笔记)

  1. API 基础

  2. FastAPI 基础

  3. 构建 REST API

  4. 数据库集成

  5. JWT 鉴权

  6. 异步编程

  7. 高级特性(WebSocket、依赖注入)

  8. 测试与调试

  9. 性能优化

  10. 部署(Docker + Nginx + Gunicorn)

相关推荐
SmartBrain5 小时前
FastAPI实战(第二部分):用户注册接口开发详解
数据库·人工智能·python·fastapi
ん贤6 小时前
Scrapy 嵌入 FastAPI 的坑:Asyncio/Twisted 桥接 + 代理池设计
python·scrapy·fastapi
PieroPc1 天前
使用 uvicorn + NSSM(作为 Windows 服务)
windows·fastapi·nssm·uvicorn
SmartBrain1 天前
FastAPI实战:基于 SQLAlchemy的后端接口开发流程
数据库·架构·fastapi
岱宗夫up1 天前
FastAPI进阶3:云原生架构与DevOps最佳实践
前端·python·云原生·架构·前端框架·fastapi·devops
PieroPc1 天前
在飞牛 NAS(fnOS)上使用 Docker 部署 FastAPI 应用(这个是从错误学习教程 图是可以的)
学习·docker·fastapi·飞牛nas
七夜zippoe1 天前
集成测试实战:构建可靠的测试金字塔体系
python·log4j·e2e·fastapi·持续集成·flask api
曲幽2 天前
FastAPI实战:WebSocket长连接保持与心跳机制,从入门到填坑
javascript·python·websocket·keep-alive·fastapi·heartbeat·connection
岱宗夫up2 天前
FastAPI进阶:从入门到生产级别的深度实践
python·信息可视化·fastapi