✅ 看情況,但團隊統一最重要
✅ JS/TS生態傾向駝峰
✅ Python/Go生態傾向下劃線
✅ 轉換成本要考慮
後端轉換(推薦在Node.js/Java環境)
// Node.js 通用轉換函數
const snakeToCamel = (str) =>
str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
const toCamelCase = (obj) => {
if (Array.isArray(obj)) return obj.map(toCamelCase);
if (obj === null || typeof obj !== 'object') return obj;
return Object.keys(obj).reduce((acc, key) => {
const camelKey = snakeToCamel(key);
acc[camelKey] = toCamelCase(obj[key]);
return acc;
}, {});
};
前端轉換(推薦在Python/Go後端時)
// axios 攔截器統一轉換
import axios from 'axios';
axios.interceptors.response.use((response) => {
if (response.data) {
response.data = toCamelCase(response.data);
}
return response;
});
如果使用 TypeScript,強烈推薦後端返回駝峰:
// 後端返回下劃線時,類型定義很別扭
interface UserResponse {
user_name: string; // 🤮 不符合TS命名規範
order_list: Order[];
}
// 後端返回駝峰時,類型定義自然
interface UserResponse {
userName: string; // ✅ 符合TS命名規範
orderList: Order[];
}
對於大量數據或高頻接口,轉換可能帶來性能開銷:
// 性能優化版本 - 只轉換需要的字段
const transformCriticalFields = (data) => {
if (!data) return data;
return {
id: data.id,
userName: data.user_name,
orderList: data.order_list?.map(item => ({
orderId: item.order_id,
productName: item.product_name
})) || []
};
};
首選方案:後端統一返回駝峰
// 理由:
1. 前端開發體驗更好(特別是TS)
2. 符合前端生態習慣
3. 一次轉換,多處使用
備選方案:前端統一轉換
// 適用場景:
1. 後端主要是Python/Go,團隊習慣下劃線
2. 歷史項目,改造成本高
3. 數據庫字段嚴格下劃線規範
決策 checklist:
"看情況,團隊統一最重要" 確實是核心原則。在實際項目中,我傾向於:
關鍵是要在項目初期明確規範,並在團隊內嚴格執行,避免前後端命名風格混用帶來的維護成本。