典型错误信息:
"detail": [{"loc": ["body", "price"], "msg": "ensure this value is greater than 0"}] 办理方法:
检查请求体是否符合模子定义
使用try-except块捕捉RequestValidationError
增长详细的字段形貌帮助客户端理解约束
预防发起:
class Product(BaseModel):
price: float = Field(
...,
gt=0,
title="商品价格",
description="必须大于0的浮点数,单位:元",
example=99.9
)
复制代码
4.2 文档不更新问题
征象:修改模子后Swagger UI未更新 排查步骤:
检查是否启用自动重新加载(uvicorn --reload)
确认没有缓存旧版本代码
逼迫刷新浏览器缓存(Ctrl+F5)
终极办理方案:
# 手动生成最新文档
from fastapi.openapi.utils import get_openapi
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom API",
version="1.0.0",
routes=app.routes,
)
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
复制代码
课后Quiz
问题1:如何为全部接口添加同一的相应头阐明?
A) 修改每个路径操作的responses参数
B) 在FastAPI实例化时配置default_response_headers
C) 使用中间件修改相应头
D) 在OpenAPI配置中添加components.securitySchemes
答案与解析精确答案:B解析:FastAPI的default_response_headers参数可以设置全局相应头,例如:
同时必要在文档中阐明时,可以共同使用openapi_extra添加文档形貌。 问题2:如何隐藏某个接口在文档中的表现?
A) 设置deprecated=True
B) 使用include_in_schema=False
C) 添加x-hidden扩展字段
D) 将接口方法改为非async
答案与解析精确答案:B在路径操作装饰器中设置include_in_schema=False即可隐藏接口: