fastapi的最新版本,提供了哪些新api可供使用

大家好,我是jobleap.cn的小九,今天学习FastAPI的使用。

FastAPI 截至2025年的最新稳定版本为 0.110.0,该版本在依赖管理、WebSocket增强、响应模型灵活性等方面引入了多个实用新特性。以下是核心新API及具体代码示例:

1. 全局依赖简化定义:@app.dependency 装饰器

功能 :替代传统的 app.dependencies.append(Depends(...)),更直观地定义全局依赖(所有路径操作都会自动调用)。

代码示例:

python 复制代码
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from .database import SessionLocal, get_db  # 假设的数据库会话工具

app = FastAPI()

# 新语法:定义全局依赖(替代 app.dependencies.append(Depends(get_db)))
@app.dependency
def global_db() -> Session:
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

# 所有路径操作会自动获取 db 依赖
@app.get("/items")
def read_items(db: Session = Depends(global_db)):  # 可直接使用全局依赖
    return db.query(Item).all()  # 假设 Item 是数据库模型

2. WebSocket 认证装饰器:@app.websocket_auth

功能:为 WebSocket 连接添加统一认证逻辑,替代手动在端点内写认证代码,简化权限校验。

代码示例:

python 复制代码
from fastapi import FastAPI, WebSocket, Depends
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# 认证逻辑:验证 token 并返回用户
async def get_current_user(token: str = Depends(oauth2_scheme)):
    if token != "secret":
        raise HTTPException(status_code=401, detail="无效 token")
    return {"username": "admin"}

# 新装饰器:为 WebSocket 绑定认证依赖
@app.websocket("/ws")
@app.websocket_auth(Depends(get_current_user))  # 自动执行认证
async def websocket_endpoint(websocket: WebSocket, user: dict):  # 认证后的用户会传入
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"已认证用户 {user['username']} 发送:{data}")

3. 依赖分组:Depends(..., group="分组名")

功能:对依赖进行分组管理,方便批量控制依赖的执行顺序或条件启用(例如"认证相关依赖""日志相关依赖")。

代码示例:

python 复制代码
from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

# 分组为 "auth" 的依赖:验证 token
async def validate_token(token: str = Header(...)):
    if not token:
        raise HTTPException(status_code=401, detail="缺少 token")
    return token

# 分组为 "auth" 的依赖:检查权限(依赖于 validate_token)
async def check_admin_permission(token: str = Depends(validate_token, group="auth")):
    if token != "admin_token":
        raise HTTPException(status_code=403, detail="无管理员权限")

# 仅执行 "auth" 分组的依赖(自动按顺序执行同组依赖)
@app.get("/admin")
async def admin_operation(
    _: None = Depends(group="auth")  # 触发整个 "auth" 分组的依赖
):
    return {"message": "管理员操作成功"}

4. 响应模型动态排除空值:response_model_exclude_none 参数

功能 :在路径操作中直接控制响应模型是否排除 None 值(无需在 Pydantic 模型中全局配置)。

代码示例:

python 复制代码
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None  # 可选字段,可能为 None

# 新参数:response_model_exclude_none=True 会自动排除值为 None 的字段
@app.get("/items/{item_id}", response_model=Item, response_model_exclude_none=True)
async def read_item(item_id: int):
    # 返回的 description 为 None,但响应中会自动排除
    return {"name": "电脑", "description": None}

响应结果:

json 复制代码
{"name": "电脑"}  # 无 description 字段

5. 动态标签生成:tags 支持可调用对象

功能 :@app.get 等装饰器的 tags 参数支持传入函数,动态生成接口标签(适用于批量管理标签,例如按版本分组)。

代码示例:

python 复制代码
from fastapi import FastAPI

app = FastAPI()

# 动态生成标签的函数(例如根据版本号)
def get_version_tags(version: str):
    return [f"v{version}"]

# tags 传入函数,动态生成标签
@app.get("/v1/items", tags=get_version_tags("1"))
async def get_v1_items():
    return {"version": "v1", "items": []}

@app.get("/v2/items", tags=get_version_tags("2"))
async def get_v2_items():
    return {"version": "v2", "items": []}

效果 :OpenAPI 文档中,两个接口会分别显示在 v1 和 v2 标签下。

以上新特性均已在 FastAPI 0.110.0 中稳定支持,主要解决了依赖管理繁琐、WebSocket 认证重复编码、响应模型灵活性不足等问题,进一步提升了开发效率。

相关推荐
贾斯汀frank9 小时前
Fleurdelix OS已预装办公套件ONLYOFFICE桌面编辑器
github
前端snow9 小时前
ai agent --- mem0 外挂记忆系统
前端
wflynn10 小时前
GitHub 日榜趋势速报 | 2026-09-30
开源·github
沙漠之主10 小时前
计算机二级考试备考全攻略:从报名到通关
计算机网络·面试
燐妤10 小时前
LangGraph-复习总览
python·ai·面试·agent·学习方法·langgraph
特立独行的猫a10 小时前
用仓颉写一个 Tauri:IPC 的每次往返实现原理(web层到仓颉层的触发过程)
前端·ui·harmonyos·tauri·鸿蒙·仓颉
Dovis(誓平步青云)10 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑
骑着蜗牛撵大象32711 小时前
Qt 事件机制详解:从 QEvent 派生类到事件过滤器的全景指南
前端·python
qq_25183645711 小时前
理发管理系统 —— 会员模块
开发语言·前端·python·flask
Frag0ut11 小时前
2027 年浏览器展望:Chrome 与 Edge 的 AI 智能体进化方向
前端·人工智能·chrome·edge·浏览器·新功能