当前位置: 首页 > news >正文

fastapi全局响应格式

商女不知亡国恨 却道天凉好个秋

首先声明,个人建议,不要有什么code、message,直接返回data给前端就好,status_code小于300就是成功,大于等于400就是失败。
但有些项目,确实不方便有200以外的status_code或是需要统一响应字段为code/message/data

查了好几个博文,都没看到很满意的写法,Response[T]的方式虽然很Pythonic,但既然已经跟前端约定好字段了,文档里只需展示data就好,无需再展示code和message

最终样例如下:

# app/main.py
from fastapi import FastAPIapp = FastAPI()@app.middleware("http")
async def add_process_time_header(request: Request, call_next):start = datetime.now()path = request.url.pathtry:response = await call_next(request)except Exception:code = int(datetime.now().timestamp())error = traceback.format_exc()logger.error(f"{path=}; {code=}; error:\n{error}")detail = f"数据异常,请刷新页面后重试!({code})"if request.url.path.split("/")[-1].startswith("_"):# 内部接口直接返回错误详情detail = f"{code=}; {error = }"response = JSONResponse({"code": 500, "message": detail, "data": None}, 500)else:if ((sc := response.status_code) < 300and not path.endswith("openapi.json")and ("json" in response.headers["content-type"])):content = b""async for chunk in response.body_iterator:content += chunktry:data = orjson.loads(content)except Exception as e:logger.exception(e)response = JSONResponse({"code": 500, "message": str(e), "data": None}, 500)else:response = JSONResponse({"code": 0, "message": "OK", "data": data}, sc)end = datetime.now()process_time = end - startcost = f"{round(process_time.total_seconds() * 1000, 3)} ms"logger.info(f"{start} --> {end} || Cost: {cost}")response.headers["X-Process-Time"] = costreturn response
http://www.jsqmd.com/news/123252/

相关文章:

  • 2025年信誉好、专业、实力强的圣多美护照移民企业推荐榜单 - 工业推荐榜
  • 2025年年终智能AI客服品牌推荐:多品牌技术架构横评与对比,附不同企业规模下的5款适配指南 - 品牌推荐
  • 前端新人必看:HTML5表格也能做圆角?实战技巧全解析
  • 2025年口碑好的淘宝天猫网店代运营服务推荐,专业淘宝网店代运营选择哪家好 - myqiye
  • 揭秘Open-AutoGLM认证失败难题:5步精准定位与快速修复方案
  • 基于VUE的共享电车管理系统[VUE]-计算机毕业设计源码+LW文档
  • 耐高压宽温域长寿命:国产微型磁力泵的技术进阶之路 - 品牌2025
  • 计算机技术与科学毕业设计最新题目指导
  • 技术突围:2025国产微型磁力泵进口替代厂商优势分析 - 品牌2025
  • 光伏系统最大功率点跟踪(MPPT)是个挺有意思的话题。今天咱们聊聊怎么用模糊控制搞这个事。先别急着翻教科书,直接上仿真代码更带劲
  • 智能AI客服如何选型更精准?2025年年终最新技术趋势评测与5款核心品牌推荐! - 品牌推荐
  • NOIP2025 T4 序列询问
  • Open-AutoGLM如何实现大模型压缩3倍性能不减?一文讲透核心技术路径
  • 错过Open-AutoGLM就等于错过下一个自动化风口:发票管理的终极形态已来
  • JavaScript 错误处理机制总结:同步/异步错误,Vue 错误处理
  • 下一代防火墙如何选型?2025年年终最新技术趋势解读与5款市场主流产品推荐! - 品牌推荐
  • 小体积,大能量:2025年优选微型磁力泵替代进口厂家推荐 - 品牌2025
  • Open-AutoGLM如何支撑6G超低时延?3大实验数据震撼揭晓
  • Open-AutoGLM任务流程中断恢复实战(9大断点场景与恢复策略全曝光)
  • 2025年年终防火墙产品推荐:基于多品牌技术架构与性能实测的5款高可靠性深度解析 - 品牌推荐
  • 【Open-AutoGLM vs LoadRunner深度对比】:谁才是负载测试的终极利器?
  • RabbitMQ讲解-基础篇 - 教程
  • 2025年年终智能AI客服品牌推荐:聚焦大模型能力与复杂场景应对的专家评测,附5家优质品牌案例清单 - 品牌推荐
  • 为什么你的压测结果不准?Open-AutoGLM与Gatling的5层适配断点分析
  • 2025年水上游乐设备公司推荐,昱浩科技详细介绍及性价比、创新能力解析 - mypinpai
  • 还在为生物认证通过率低发愁?Open-AutoGLM调优秘籍首次公开
  • 大疆光学工程师面真题拆解分析
  • 2025年度游艇制造商推荐TOP5:昱浩科技实力凸显 - mypinpai
  • 23、扩展 Windows PowerShell 的功能与安全管理
  • Open-AutoGLM认证异常深度解析(专家级故障排查手册)