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
相关产品推荐
相关产品推荐

