FastAPI如何通过response_model过滤第三方接口返回的响应字段?
实现方案
你只需要调整Pydantic模型和路由的response_model定义即可,全程无需手动遍历处理数据,FastAPI会自动完成字段过滤:
1. 定义正确的响应结构模型
你的返回结构是外层包裹data字段的数组结构,不能直接用单条Project作为响应模型,需要新增一层外层响应模型:
from pydantic import BaseModel from typing import List class Project(BaseModel): name: str description: str # 新增外层响应模型,匹配你要返回的结构 class ProjectListResponse(BaseModel): data: List[Project] # 显式声明忽略模型中未定义的字段,避免原始响应的额外字段引发报错 # Pydantic v2 写法: model_config = {"extra": "ignore"} # 如果用的是Pydantic v1,替换为下面的内部类: # class Config: # extra = "ignore"
2. 修改路由的response_model参数
将路由的response_model指定为你刚定义的外层ProjectListResponse即可,原有接口请求逻辑不需要做任何修改:
@app.get("/projects", response_model=ProjectListResponse) async def get_projects(): projects = RequestsApi(base_url, headers=headers) response = projects.get("/api/projects") return response.json()
效果说明
配置完成后FastAPI会自动完成以下处理:
- 自动丢弃原始响应外层的
warnings字段 - 自动遍历
data数组内的所有项目对象,只保留name和description两个字段 - 最终返回的结构和你要求的目标结构完全一致
内容的提问来源于stack exchange,提问作者wiwa1978
相关产品推荐
相关产品推荐

