程序员转型:从PHP到AI+Golang网络请求封装优化
优化网络请求封装:自定义选项独立为第二参数,提升可读性与维护性;新增字段命名自动转换,默认后端snake_case转前端camelCase,请求时反向转换,统一命名风格。
这一期,我们继续深入网络请求封装的优化实践。上一期我们探讨了前端点选验证码组件的实现,本期则将重点放在请求层的细节打磨与优化上。

网络请求封装优化
首先来看第一个改动:将自定义请求选项从嵌套参数中分离出来,独立传递。
请求选项独立参数传递:提升代码可读性
目前,当需要自定义请求选项时,代码写法如下——在第一个参数中嵌套一个requestOptions对象:
复制代码export function checkClickCaptcha(data: ClickRequest, apiBaseURL?: string) {
return request({
url: '/common/captcha/verify',
method: 'POST',
requestOptions: {
loading: true,
cancelDuplicate: true,
showErrorMessage: false,
},
})
}
直观来看,我们希望改为如下形式:将requestOptions直接作为第二个参数独立传递给request函数。这样,第一个参数仅包含axios的标准请求配置,第二个参数则为自定义选项:
复制代码export function checkClickCaptcha(data: ClickRequest) {
return request(
{
url: '/common/captcha/verify',
method: 'POST',
data,
},
{
loading: true,
cancelDuplicate: true,
showErrorMessage: false,
}
)
}
参数1为axios请求配置,参数2为自定义请求选项。独立分离后,代码的可读性、类型推导、扩展性及维护性均得到全面提升。这个思路源于编写提示词时的灵感,直接交给CC(AI助手)实现:
复制代码● 重构完成。改动总结如下:修改的文件1. src/utils/request.ts- 删除了 RequestConfig 接口(已不需要,直接使用 AxiosRequestConfig)
- request 函数签名从 request(config: RequestConfig) 改为 request(config: AxiosRequestConfig, options?: RequestOptions)
- 内部将 options 合并到 config 的 requestOptions 字段上,拦截器逻辑无需任何改动2. src/api/common.ts- checkClickCaptcha 中的 requestOptions 从第一个参数嵌套中提取为独立的第二个参数:
// 之前
request({ url: '...', requestOptions: { showErrorMessage: false } })
// 之后
request({ url: '...' }, { showErrorMessage: false })无需改动的文件- src/api/admin/index.ts — 未使用 requestOptions,现有的单参数调用完全兼容
- 其他不涉及 requestOptions 的调用方同样无需改动,因为 AxiosRequestConfig 就是之前第一个参数去掉 requestOptions 后的类型 Baked for 50s
人工review后确认无误。说实话,实际修改的代码量并不多,反而提示词写了不少。不得不承认,有些失算。
后端接口响应字段自动转换为 camelCase 命名风格
第二个改动更具趣味性。各语言服务端及网络传输惯例中,JSON字段通常采用snake_case命名。而前端开发者更习惯使用camelCase访问数据。因此,在请求层实现自动转换,已是常见最佳实践。
这里要求CC添加一个转换开关,默认开启,并实现该功能。来看具体效果:
全部完成,以下是变更总结:
变更清单
src/utils/request.ts — 核心改造
| 变更项 | 说明描述 |
|---|---|
| import { camelCase } | 引入 lodash-es 的 camelCase,复用已有依赖,无需新增 |
| convertCase?: boolean | 新增请求选项 convertCase,默认开启(true) |
| keysToCamelCase() | 递归转换函数,支持对象、数组及嵌套结构 |
| 响应拦截器 L190-193 | 在响应拦截器中自动对 response.data.data 执行转换 |
接口 + Store + 模板统一改名
| 文件 | 变更 |
|---|---|
| src/stores/interface/index.ts | 字段命名从 snake_case 改为 camelCase:last_login_at → lastLoginAt,last_login_ip → lastLoginIp |
| src/stores/adminInfo.ts | 初始 state 同步改为 camelCase |
| src/layouts/admin/components/na vMenu.vue | 模板变量引用改为 adminInfo.lastLoginAt |
使用方式:
// 默认:自动转换(开关打开)
request({ url: '/admin/init', method: 'GET' })
// 某个接口不需要转换时,显式关闭
request({ url: '/some/api', method: 'GET' }, { convertCase: false })
这样一来,前端所有接口的响应字段均统一为camelCase风格,彻底解决了命名不一致的问题。
在review时,直接要求它同时将请求中的camelCase数据反向转换为snake_case(由同一开关控制)。从此前后端命名风格彻底解耦——该功能通常仅在大型项目中配置,但借助AI轻松实现,效果显著。
现在起:
API响应中,snake_case命名字段自动转换为camelCase;- 发起请求时,传递的
camelCase数据(含data和params)自动转为snake_case。
前端可全程使用camelCase,开发体验显著提升。例如:
- 访问响应数据时,接口返回
res.data.data.admin_info.last_login_at,现在可直接用res.data.data.adminInfo.lastLoginAt获取; - 发起请求时,
data可写为{adminInfo: {lastLoginAt: '2023-05-01'}},发送时自动转换为{admin_info: {last_login_at: '2023-05-01'}},简洁高效。
本期网络请求封装优化就此告一段落。下期将继续推进后续模块的封装与优化工作,敬请期待。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
CSS3入门指南:常用特性解析与实战练习路径
CSS3是现代网页开发的核心技术,涵盖圆角、阴影、渐变、过渡、动画及响应式布局等高频特性。本文梳理了CSS3的核心应用场景、分步学习路径与综合练习案例,帮助初学者快速建立从基础排版到现代交互的完整开发思路,并规避常见样式陷阱。
CSS border 边框属性详解:语法、拆分写法与常见问题排查
本文系统讲解CSS标准边框属性border的完整语法结构,涵盖简写与拆分写法、单边控制技巧及border-radius配合方案。针对边框不显示、元素尺寸异常等高频问题提供排查路径,帮助开发者快速掌握边框设置规范并提升界面视觉一致性。
CSS3动画属性有哪些:常用属性与用法说明
CSS3动画主要分为transition过渡与animation关键帧两类。本文梳理常用属性、简写语法与@keyframes规则,结合悬停、入场、循环等场景给出代码示例与选型建议,帮助开发者快速写出流畅且可控的动画效果。
CSS3渐变色语法与常见用法
CSS3渐变色通过纯代码生成平滑颜色过渡,广泛用于按钮、横幅与卡片背景。本文系统梳理线性与径向渐变的核心语法、方向控制、停靠点设置及多层叠加技巧,提供可直接复用的场景代码,并给出兼容性策略与常见渲染异常排查方法,帮助开发者快速构建稳定、可维护的渐变样式。
CSS3手册中文版下载指南:获取渠道、筛选标准与使用建议
寻找CSS3手册中文版下载资源时,如何判断来源可靠性、筛选高质量内容并有效使用?本文从获取渠道、版本识别、下载验收到替代方案,提供一套可执行的判断标准,帮助你快速找到适合学习或查阅的中文手册。
- 热门数据榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-09-01 06:33
2026-09-01 06:33
2026-09-01 06:32
2026-09-01 06:31
2026-09-01 06:30
2026-09-01 06:30
2026-09-01 06:29
2026-09-01 06:29
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

