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

FastAPI非Pydantic模式下接口文档优化与Request参数问题

FastAPI OpenAPI文档优化问题解答

问题1:将必填字段嵌入Request并让文档识别为必填

可以实现。不用Pydantic模型的前提下,通过FastAPI的Body参数声明必填字段,同时注入Request对象即可满足需求——既可以从Request中读取请求体内容,又能让OpenAPI自动标记这些字段为必填项。

示例代码:

from fastapi import FastAPI, Body, Request

app = FastAPI()

@app.post("/second-api")
async def second_api(request: Request, 
                     session_id: str = Body(..., required=True), 
                     computer_id: str = Body(..., required=True)):
    # 如需从Request读取完整请求体
    full_body = await request.json()
    return {
        "session_id": session_id,
        "computer_id": computer_id,
        "request_body": full_body
    }

这里Body(..., required=True)会告诉FastAPI字段为必填,OpenAPI文档会自动标注必填标识,同时你可以通过request对象获取整个请求体的内容。

问题2:不使用Pydantic模型自定义请求体示例值

直接利用Body参数的example属性就能设置自定义示例,无需依赖Pydantic。有两种实现方式:

方式1:给单个字段设置示例

给每个Body字段单独指定example值,文档会分别展示各字段的示例:

from fastapi import FastAPI, Body

app = FastAPI()

@app.post("/second-api")
async def second_api(session_id: str = Body(..., required=True, example="sess_202405"), 
                     computer_id: str = Body(..., required=True, example="pc_home_001")):
    return {"session_id": session_id, "computer_id": computer_id}

方式2:设置整个请求体的示例

用字典接收请求体,通过Body的example参数传入完整的示例JSON结构,文档里会展示你自定义的完整请求体示例:

from fastapi import FastAPI, Body

app = FastAPI()

@app.post("/second-api")
async def second_api(data: dict = Body(..., example={"session_id": "sess_202405", "computer_id": "pc_home_001"})):
    session_id = data["session_id"]
    computer_id = data["computer_id"]
    return {"session_id": session_id, "computer_id": computer_id}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:55:32