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 文档中,两个接口会分别显示在 v1v2 标签下。

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

相关推荐
天天扭码1 天前
如何实现流式输出?一篇文章手把手教你!
前端·aigc·ai编程
前端 贾公子1 天前
vue移动端适配方案 === postcss-px-to-viewport
前端·javascript·html
GISer_Jing1 天前
AI营销增长:4大核心能力+前端落地指南
前端·javascript·人工智能
GSDjisidi1 天前
东京IT软件会社-(株)GSD|多种技术栈募集,高度人才+20分
开发语言·面试·职场和发展
明远湖之鱼1 天前
一种基于 Service Worker 的渐进式渲染方案的基本原理
前端
前端小端长1 天前
Vue 中 keep-alive 组件的原理与实践详解
前端·vue.js·spring
FeelTouch Labs1 天前
Nginx核心架构设计
运维·前端·nginx
雪球工程师团队1 天前
别再“苦力”写后台,Spec Coding “跑” 起来
前端·ai编程
m0_471199631 天前
【场景】前端怎么解决离线收银、数据同步异常等场景问题
前端·javascript