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)

相关推荐
今年下半年1 天前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
溪语流沙2 天前
【Web全栈进阶】前端对接新契约:信封解包 + 统一错误处理
前端·vue.js·python·状态模式·fastapi
像风一样自由20202 天前
56.实战PostgreSQL-pgvector-FastAPI构建轻量级RAG
数据库·人工智能·postgresql·大模型·fastapi·智能体
张张123y2 天前
后端第九课:部署上线(把你的 FastAPI 后端真正跑起来给别人用)
python·docker·部署·fastapi
尼给路达哟2 天前
node(koa)和python(fastapi)面试
python·面试·fastapi
张张123y3 天前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
张张123y3 天前
# 后端第八课:数据库入门(给 FastAPI 接口加上“记忆“,存下问答历史)
数据库·sql·mysql·oracle·fastapi·sqllite
silvamux_3 天前
MCP 协议如何让大模型完成工具调用
大数据·服务器·elasticsearch·fastapi·vllm
小马不起床4 天前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
for_ever_love__5 天前
LangChain 上线部署:把链和 Agent 变成能对外服务的 API
langchain·部署·fastapi·rest api·服务·上线·langserve