You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI文档中将Pydantic联合类型的指定模型标记为弃用?

给联合类型中的特定模型标记弃用并在FastAPI文档中显示

要实现把Log模型的user字段里的SimpleUser标记为弃用,有两种可行方案,可根据你的需求选择:

方案一:全局标记SimpleUser模型为弃用

如果SimpleUser模型本身已不再推荐使用,直接给它添加JSON Schema扩展属性,所有用到该模型的地方都会在文档中显示弃用状态:

from typing import Union
from pydantic import BaseModel, Field

class Admin(BaseModel):
    name: str

class SimpleUser(BaseModel):
    age: int
    # 添加全局弃用标记
    model_config = {"json_schema_extra": {"deprecated": True}}

class Log(BaseModel):
    user: Union[Admin, SimpleUser, None] = Field(default=None)

FastAPI会自动读取该配置,在Swagger UI文档中,SimpleUser对应的Schema会被标记为弃用(通常显示删除线或标注deprecated)。

方案二:仅在Log的user字段中标记SimpleUser为弃用

如果只想在Log的user字段范围内弃用SimpleUser,不影响其他地方使用该模型,需要自定义OpenAPI Schema:

from typing import Union, Dict, Any
from fastapi import FastAPI
from pydantic import BaseModel, Field
from fastapi.openapi.utils import get_openapi

class Admin(BaseModel):
    name: str

class SimpleUser(BaseModel):
    age: int

class Log(BaseModel):
    user: Union[Admin, SimpleUser, None] = Field(default=None)

app = FastAPI()

# 示例接口,用于生成文档
@app.post("/submit-log")
def submit_log(log: Log):
    return {"status": "success", "log": log}

def custom_openapi() -> Dict[str, Any]:
    # 缓存已生成的Schema避免重复处理
    if app.openapi_schema:
        return app.openapi_schema
    
    # 生成基础OpenAPI Schema
    openapi_schema = get_openapi(
        title="Log Service API",
        version="1.0.0",
        routes=app.routes,
    )
    
    # 定位到Log模型的user字段的联合类型定义
    log_schema = openapi_schema["components"]["schemas"]["Log"]
    user_anyOf = log_schema["properties"]["user"]["anyOf"]
    
    # 遍历联合类型,给SimpleUser对应的引用添加弃用标记
    for schema_item in user_anyOf:
        if schema_item.get("$ref") == "#/components/schemas/SimpleUser":
            schema_item["deprecated"] = True
    
    app.openapi_schema = openapi_schema
    return openapi_schema

# 替换默认的OpenAPI生成函数
app.openapi = custom_openapi

启动服务后,在Swagger UI中查看Log的user字段,SimpleUser选项会被标记为弃用,而其他场景下使用SimpleUser不受影响。

内容的提问来源于stack exchange,提问作者Bastien B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:05:17