当前位置: 首页 > 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.gsyq.cn/news/135444.html

相关文章:

  • 2025年年终智能AI客服品牌推荐:涵盖大模型集成与全渠道服务,5款知名品牌系统化能力盘点 - 品牌推荐
  • 耐高压宽温域长寿命:国产微型磁力泵的技术进阶之路 - 品牌2025
  • 智能AI客服如何选型更精准?2025年年终最新技术趋势评测与5款核心品牌推荐! - 品牌推荐
  • Open-AutoGLM如何支撑6G超低时延?3大实验数据震撼揭晓
  • 基于VUE的共享电车管理系统[VUE]-计算机毕业设计源码+LW文档
  • RabbitMQ讲解-基础篇 - 教程
  • 元旦排版神器免费领!10套精选模板限时放送
  • 为什么你的压测结果不准?Open-AutoGLM与Gatling的5层适配断点分析
  • 2025年度游艇制造商推荐TOP5:昱浩科技实力凸显 - mypinpai
  • Open-AutoGLM认证异常深度解析(专家级故障排查手册)
  • 24、PowerShell 安全与脚本签名全解析
  • 英文文献检索实用指南:高效策略与技巧解析
  • 2025工厂短视频宣传服务机构TOP5权威推荐:甄选优质服务商助力工厂品牌破圈 - myqiye
  • 【企业级安全合规必备】:Open-AutoGLM生物认证配置必须掌握的4项标准
  • 【6G预研决胜点】:Open-AutoGLM模型轻量化适配的7步实战法
  • LangFlow开源项目部署步骤详解(含Docker镜像)
  • 2025 年 12 月模具厂家权威推荐榜:螺母/紧固件/螺丝/钛合金/冷镦/热镦/钨钢/合金/多工位/银触点模具,精工智造与耐用典范之选 - 品牌企业推荐师(官方)
  • Open-AutoGLM 5G网络自适应增强(稀缺架构设计细节流出)
  • 2025年四川电梯广告投放必看:十大优选公司,电梯门贴广告/主流网络媒体/电梯框架广告/户外LED广告/户外农村墙体电梯广告品牌排行榜单 - 品牌推荐师
  • 生物识别安全升级迫在眉睫,Open-AutoGLM适配你真的会吗?
  • django学生荣誉证书管理系统_jytq9489
  • LangFlow支持哪些大模型?本地部署与云端调用全解析
  • 【超全】基于SSM的高校教师科研管理系统【包括源码+文档+调试】
  • 基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
  • 电商项目管理全攻略:从大促到日常,重塑效率的方法论及实用工具
  • MySQL创建组合索引时的注意细节
  • LangFlow镜像SOC2准备工具:帮助企业通过审计认证
  • 2025年GEO优化服务推荐,专业AI-GEO优化公司全解析 - 工业推荐榜
  • 2025三元乙丙O型圈厂家TOP5权威推荐:甄选epdmO型圈研发实力标杆 - mypinpai
  • 2025年靠谱GEO推广企业排名,新测评精选GEO精准推广服务专业公司推荐 - 工业推荐榜