AI开发实战3、90%人用AI写前端都踩的坑:API层混乱!3步教你标准化

简介: 本文以开源记账小程序“时光账记”为例,直击AI写前端API层的痛点——请求方式混乱、地址硬编码、风格不统一。提出通过结构化Prompt明确技术栈、命名规范与文件路径约束,让AI产出标准、可维护、支持Mock的接口代码,真正实现高效人机协同。(239字)

如果你也用 AI 写前端代码,你就会发现,AI 帮你写的前端请求代码总是五花八门?一会用 axios,一会用 uni.request,甚至把 API 地址直接写死在页面里?

那么,有同学就说了,这又不是不行,代码也是可以正常跑起来的呀,是的,代码确实是可以跑起来的,但是这就完全丢失了代码的易维护性,也不方便自己写 mock 数据。

本篇文章,就结合我最近写的一个开源项目——时光账记小程序,来跟大家一起聊聊,如何让 AI 生成标准、统一、可维护的 API 层代码。

时光账记

时光账记是一款基于 Uni-app + Vue 3 开发的个人记账微信小程序,后端接口基于 go-zero 微服务框架构建。

这是一款专注于个人财务管理与生活记录的应用。它不仅支持非常简洁的方式来管理基础的收支记录,还提供了多账本管理、周期性自动记账、预算控制以及节日倒计时等贴心功能,帮助用户更好地管理个人及家庭财务。

现在我已将代码都开源了,感兴趣的朋友可以去观摩观摩,也请帮忙点个 Star 支持一下,谢谢!

小程序端(Uni-app + Vue3): https://github.com/pudongping/momento-miniapp
API 接口(Go + go-zero): https://github.com/pudongping/momento-api

前端部分 AI 占比 100%(自己一行代码都没写),接口部分 AI 占比 80%
这也是一套非常不错的 AI 练手项目,如果对你有帮助,希望帮忙点个 Star 支持一下,谢谢!

homepage.png

login.png

profile.png

recurring.png

transaction.png


😫 痛点:AI 写的代码,能跑但很难阅读

在开发前端项目时,我们通常会有统一的 api/ 目录来管理所有接口。但是,当你直接告诉 AI:“帮我写一个获取用户信息的接口”时,它可能会给你这样的代码:

错误示范 1:直接在组件里写请求

uni.request({
   
  url: 'https://api.example.com/user/info',
  method: 'GET',
  success: (res) => {
    ... }
})

后果:接口地址散落在各个页面,后续切换环境的话,改动太多。

错误示范 2:自作聪明的封装

// AI 自己发明了一套封装
import request from '@/utils/http.js'; // 你的项目里根本没这个文件!
export function getUser() {
   
  return request.get('/user');
}

后果:引用了不存在的文件,或者风格与现有代码完全不符。


💡 破局:给 AI 立“规矩”

AI 就像一个刚入职的实习生,它不知道你项目的架构和规范。而你需要做的工作就是:把项目里的“潜规则”变成显性的指令。

以我的 Momento 小程序项目为例,我的 API 目录结构如下:

  • api/request.js: 核心请求封装(处理 Token、Mock 数据、错误拦截等)。
  • api/index.js: 统一导出所有业务接口。

我希望 AI 生成的代码必须满足以下条件:

  1. 引用规范:必须从 ./request.js 导入 get, post, put, del 方法。
  2. 命名规范:函数名必须以 Api 结尾(如 loginApi,方便自己可以区分哪些方法是请求接口的方法,哪些不是)。
  3. 代码风格:使用箭头函数。

效果类似这样


生成 API 方法的 Prompt

为了达到这个目的,我编写了一段 Prompt(提示词)。你只需要把这段话发给 AI,它写出来的代码就基本能符合要求。

先要求 AI 封装好 api/request.js 文件

# Role
你是一个高级前端架构师,擅长使用 Uni-app 和 Vue 3 进行移动端应用开发。

# Task
请帮我封装一个功能完善的 HTTP 请求库(类似 Axios 的封装),文件路径为 `api/request.js`。该封装需要基于 `uni.request``uni.uploadFile`,并包含以下核心功能:

# Requirements

## 1. 基础配置与环境
- 引入配置文件(如 `config/index.js`)中的 `baseURL``useMock` 开关。
- 支持默认配置对象,包含:超时时间(默认 15s)、错误提示开关、Token 前缀(如 'Bearer ')、Token Header 键名(如 'Authorization')。
- 提供 `setRequestConfig` 方法允许外部动态修改配置。

## 2. 辅助功能
- **Request ID**:为每个请求生成唯一的 `X-Request-ID`(时间戳 + 随机数),用于日志追踪。
- **设备 ID**:实现 `getDeviceId` 方法,首次获取时生成并存储在本地缓存(`uni.setStorageSync`),后续直接读取,请求头中携带 `X-Device-ID`- **用户 ID**:从本地缓存用户信息中尝试获取 `user_id``uid`,若存在则在请求头中携带 `X-User-ID`- **URL 处理**:自动判断 URL 是否为绝对路径,若不是则拼接 `baseURL`## 3. Mock 数据支持 (关键)
- 在发起真实网络请求前,检查 `useMock` 开关。
- 如果开启 Mock 且请求 URL 在 `mock/index.js` 导出的 `mockApis` 映射中有对应处理函数,则拦截请求。
- 执行 Mock 函数,模拟网络延迟(如 300ms),并返回 Promise 结果。
- Mock 逻辑需同时支持普通请求和上传请求。

## 4. 拦截器与逻辑处理
- **请求拦截**- 自动在 Header 中添加 Token(如果本地缓存存在)。
  - 添加上述的追踪 ID(Request ID, Device ID, User ID)。
- **响应拦截**- **HTTP 状态码检查**:处理非 2xx 的 HTTP 状态码。
  - **业务状态码检查**    - 约定 `code === 0` 或 `code === 200` 为成功,直接返回 `data`。
    - **Token 过期处理**:当 `code === 401` 时,自动执行登出逻辑(清除本地 Token 和用户信息,提示用户,延时跳转回登录页)。
    - **其他错误**:默认弹出 Toast 提示错误信息(可配置关闭)。

## 5. API 方法导出
- 导出通用的 `request` 函数。
- 导出便捷方法:`get`, `post`, `put`, `del` (delete)。
- **文件上传**:导出 `upload` 方法,封装 `uni.uploadFile`,同样需要支持 Mock、Header 注入、Token 校验和统一的响应处理(注意 `uploadFile` 返回的 data 通常是字符串,需要尝试 `JSON.parse`)。

如果你需要添加接口的时候,你就可以直接复制下面的提示词给到 AI

创建新的接口时

# Role
你是一名资深前端架构师,负责维护一个基于 Uni-app 的微信小程序项目。

# Context
我们需要在 `api/index.js` 文件中新增一组 API 接口。
该项目已经封装了核心请求库,位于同级目录下的 `request.js` 中。

# Constraints (必须遵守的规则)
1. **导入依赖**:你只能使用以下语句导入请求方法:
   `import { get, post, put, del, upload } from './request.js';`
2. **命名规范**:所有导出的函数名必须以 `Api` 为后缀(例如 `getUserInfoApi`, `createOrderApi`)。
3. **参数处理**- GET 请求通常接收 params 对象。
   - POST/PUT 请求通常接收 data 对象。
   - DELETE 请求通常接收包含 id 的对象。
4. **代码风格**:必须使用 ES6 箭头函数,保持简洁。

# Code Reference (参考代码)
// api/index.js 现有代码范例
import { get, post, put, del } from './request.js';

// 用户相关
export const getUserInfoApi = () => get('/user/info');
export const loginApi = (code) => post('/user/login', { code });

当你将上面的两个提示词给到 AI 之后,如果当你有新的接口需要添加时,你就可以直接跟 AI 说,“保持项目现有风格,帮我添加 xxxx 接口”即可,不需要每次都重复发提示词。

当然了,以上封装 request.js 的代码在同类型项目中只需要写一次,下次有类似的项目的时候,可以直接拷贝过去,完全没有必要每次都重复写。

📝 总结

不要怪 AI 笨,很多时候是我们没有给出清晰的指令。

对于前端项目中的 API 层,“约束”比“创造”更重要。通过构建这样一个标准化的 Prompt,你可以:

  1. 节省 Code Review 时间:不用再纠结命名和风格。
  2. 降低维护成本:所有接口长得都一样,新人接手也能秒懂。
  3. 提高开发效率:完全可以直接复制粘贴,修修改改后就能直接用。

赶紧把这个 Prompt 保存到你的笔记里,下次写接口时试一试吧!

经常用 AI 辅助开发的同学也发现了,用 AI 编辑器开发项目时,明明已经跟 AI 讲清楚了“规则”为什么写出的代码还是会不在规则之类?总感觉 AI 失忆了。是的,AI 不可能会一次性记住太多的规则,但是我们的项目中就需要要各种规则限定,那么,该怎么处理呢?

下一篇文章,我们就来讲解一下 CLAUDE.md。让 AI 每次写代码时,都有“记忆”。

相关文章
|
5月前
|
人工智能 前端开发 小程序
AI开发实战1、手摸手教你一行代码不写,全程AI写个小程序——前端布局
本文揭秘如何用“反向思维”驯服AI写前端:告别千篇一律的赛博朋克渐变风,通过精准Prompt、全局样式锚定与Mock先行策略,让AI稳定输出风格统一、逻辑闭环的整套项目代码。附开源小程序实战案例!
648 0
AI开发实战1、手摸手教你一行代码不写,全程AI写个小程序——前端布局
在钉钉开放平台中,事件订阅功能允许你的应用订阅钉钉的各种事件
在钉钉开放平台中,事件订阅功能允许你的应用订阅钉钉的各种事件【1月更文挑战第20天】【1月更文挑战第98篇】
816 1
|
5月前
|
人工智能 小程序 前端开发
AI开发实战4、AI总是忘记项目规范?因为你缺了这份终极上下文文件
本文是AI编程实战系列第4篇,聚焦前端开发,详解如何用`CLAUDE.md`(AI专属项目指南)提升AI编码准确性与一致性——涵盖上下文构建、规范统一、效率提升与幻觉抑制。下篇将切入go-zero后端接口开发。(239字)
838 0
AI开发实战4、AI总是忘记项目规范?因为你缺了这份终极上下文文件
|
6月前
|
人工智能 安全 API
深入理解OpenClaw技术架构与实现原理(上)
本文深度剖析OpenClaw——当前最热门的个人AI助手系统,涵盖其本地优先、多端联动的总体架构,以及Gateway网关、Agentic Loop、定时任务、工具系统、Channels连接生态、上下文管理、SubAgent子智能体等16大核心模块。全文以AI-Coding实现为特色,强调安全沙箱、协议化设计与自进化能力,展现新一代软件构建范式的开山之作。
深入理解OpenClaw技术架构与实现原理(上)
|
5月前
|
人工智能 前端开发 小程序
AI开发实战2、只有 1% 的人知道!这样给 AI 发指令,写出的前端项目堪比阿里 P7
本文揭秘AI编程“屎山”变精品的关键:不是AI不够强,而是你不会“调教”。提供一套实战验证的“四步Prompt清单”——定技术栈、定设计规范、封装基础组件、开发业务页面,助你用AI高效产出结构清晰、风格统一的专业级前端项目(Uni-app+Vue3记账小程序Momento已100%由AI实现)。
416 0
AI开发实战2、只有 1% 的人知道!这样给 AI 发指令,写出的前端项目堪比阿里 P7
|
5月前
|
人工智能 小程序 API
AI开发实战5、手摸手教学:如何用AI+go-zero,从数据库设计开始构建API
本文是AI开发实战系列第5篇,聚焦用Claude 3.5/Gemini等模型高效构建Go微服务后端。以开源记账小程序「时光账记」为例,详解如何通过AI辅助完成数据库建模、API契约定义与业务代码生成,强调“框架自建+AI填空”模式,兼顾效率与代码一致性。(239字)
414 1
AI开发实战5、手摸手教学:如何用AI+go-zero,从数据库设计开始构建API
|
5月前
|
人工智能 小程序 JavaScript
AI开发实战6、抄作业吧!我优化了N遍的go-zero项目AI协作规范文件,一字不差全给你
本文是“AI开发完整项目”系列终篇,详解如何为go-zero微服务自动生成并规范编写CLAUDE.md文档,涵盖项目架构、API规范、代码生成流程及最佳实践,并开源「时光账记」小程序全栈代码供参考学习。(239字)
620 6
AI开发实战6、抄作业吧!我优化了N遍的go-zero项目AI协作规范文件,一字不差全给你
|
3月前
|
人工智能 开发工具 git
Claude Code新手零基础入门教程:安装配置、国产模型接入与常用命令全集
在AI编程工具快速迭代的当下,传统代码补全插件已经无法满足复杂开发需求,而**Claude Code**凭借终端原生、任务驱动、轻量高效、多模型兼容的独特优势,成为开发者首选的智能编程助手。它不需要依赖笨重的IDE插件,全程在终端运行,能够自主理解项目需求、拆解开发任务、生成代码、修改文件、执行终端命令、管理Git版本仓库,覆盖从项目初始化、代码编写、Bug修复到项目重构的全流程开发工作。
1038 3