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

开发中后端返回下划线数据,要不要统一转驼峰?

先说结论。看情况!!!!

  • 前端 主要用 JS/TS 建议后端返回 camelCase,减少前端转换成本。
  • 后端 主要是 Python/Go 建议保持 snake_case,前端做转换。
  • 但是团队统一风格最重要!如果统一返回驼峰就驼峰,统一下划线那就下划线。

建议统一使用驼峰(camelCase)的情况

适用情况:

  1. 前端(Vue/React)使用 JavaScript/TypeScript

    • JavaScript/TypeScript 代码风格通常使用 驼峰命名,如果后端返回的是 下划线命名(snake_case),前端需要额外转换,增加维护成本。
    • 例如:
      {
        "userName": "张三",
        "orderList": []
      }
      
      在前端可以直接 user.userName 访问,不需要转换。
  2. 团队约定统一风格

    • 如果团队约定所有数据(前后端)都使用驼峰,则后端可以提前转换,保证一致性,减少前端适配工作。

后端转换方式(Node.js 示例)

  • 如果数据库字段使用 snake_case,可以在返回数据时转换:
    const toCamelCase = (obj) => {
      if (Array.isArray(obj)) {
        return obj.map(toCamelCase);
      } else if (obj !== null && typeof obj === 'object') {
        return Object.keys(obj).reduce((acc, key) => {
          const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
          acc[camelKey] = toCamelCase(obj[key]);
          return acc;
        }, {});
      }
      return obj;
    };
    
    // 示例:
    const dbData = { user_name: "张三", order_list: [] };
    console.log(toCamelCase(dbData));
    // { userName: "张三", orderList: [] }
    

不转换,前端自己适配情况

适用情况:

  1. 后端数据库、API 规范统一使用 snake_case

    • 例如后端是 Python(Django、Flask)Go,通常 API 返回 snake_case,如果强行改为 camelCase,可能会违背语言习惯
    • 例如:
      {
        "user_name": "张三",
        "order_list": []
      }
      
    • 前端可以在请求拦截器中转换:
      const toCamelCase = (obj) => { /* 同上 */ };
      
      axios.interceptors.response.use((response) => {
        response.data = toCamelCase(response.data);
        return response;
      });
      
  2. 数据库字段严格要求 snake_case

    • 有些公司数据库规范是 snake_case,直接转换可能会影响 ORM 的映射,造成数据一致性问题

🎯 结论

  • 前端主要用 JS/TS 建议后端返回 camelCase,减少前端转换成本。
  • 后端主要是 Python/Go 建议保持 snake_case,前端做转换。
  • 团队统一风格最重要,如果后端已经全部 snake_case,前端可以通过 axios 统一转换。

相关文章:

  • 【HTML5游戏开发教程】零基础入门合成大西瓜游戏实战 | JS物理引擎+Canvas动画+完整源码详解
  • C# BULK INSERT导入大数据文件数据到SqlServer
  • centos7.9镜像源及Python引入ssl问题处理
  • OLED中英文混合显示
  • 如何设计一个处理物联网设备数据流的后端系统。
  • SpringMVC 配置详解
  • 《深度剖析:DevEco Studio 如何实现人工智能模型的高效可视化开发》
  • 交换机(access端口)
  • Vue中的状态管理器Vuex被Pinia所替代-上手使用指南
  • 数据预处理习题
  • EtherCAT转CANopen配置CANopen侧的PDO映射
  • JavaScript性能优化实战手册:从V8引擎到React的毫秒级性能革命
  • 大数据平台各组件功能与协同作用全解析
  • Python Excel表格数据对比工具
  • Spring MVC配置详解:从历史到实战
  • 多路径PKL文件读取与合并
  • 云服务器怎么设置端口禁用呢?
  • Python 迭代器与生成器:深入理解与实践
  • 资源分配图(RAG)检测死锁算法实现
  • 【数据库】sql错题详解
  • 龚正盛秋平王晓真共同启动2025国际消费季暨第六届上海“五五购物节”
  • 韩国法院将重审李在明案,韩德洙入局能否为大选带来变数?
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 中国代表:美“对等关税”和歧视性补贴政策严重破坏世贸规则
  • 揭秘神舟十九号返回舱“软着陆”关键:4台发动机10毫秒内同时点火
  • 圆桌|如何应对特朗普政府的关税霸凌?一种联合国视角的思考