不写一行代码,我用AI写了一个API网关网站

_

在这个AI编程工具爆发的时代,我尝试了一个有趣的实验:完全依赖AI助手,从零开始构建一个功能完整的API网关服务。整个过程没有编写一行传统意义上的代码,所有的逻辑实现都通过自然语言与AI协作完成。以下是这段奇妙经历的记录。

1775467744805.png

网站预览优优API

项目初衷

作为一个开发者,我经常需要调用各种第三方API——天气查询、热榜数据、IP归属地、手机号归属地等等。这些接口分散在不同的平台上,有的需要申请密钥,有的有调用限制,有的则干脆不稳定。

为什么不做一个统一的API网关,把常用的接口聚合起来,提供一个标准的调用方式?这个想法很简单,但实现起来需要考虑很多细节:

  • 接口鉴权与限流
  • 数据缓存策略
  • 错误处理与日志记录
  • 后台管理系统
  • 文档维护

在传统开发模式下,这至少需要几周的开发时间。但有了AI助手,情况完全不同了。

技术栈选择

我向AI描述了需求后,它给出了技术栈建议:

后端服务(网关)

  • 语言:Go 1.24
  • 框架:chi(轻量级路由)
  • 数据库:MySQL
  • 缓存:Redis
  • 部署:Docker

后台管理系统

  • 框架:Nuxt 3
  • UI库:Element Plus
  • 状态管理:Pinia

这个组合很经典——Go处理高并发请求,Nuxt提供现代化的管理界面。我接受了这个建议。

从零开始的开发之旅

第一阶段:项目搭建

首先,我让AI帮我创建项目结构。

"帮我创建一个Go项目,作为API网关服务,需要支持接口转发、鉴权、限流等功能。"

AI不仅生成了完整的项目目录结构,还创建了go.mod文件、配置了Docker环境、写好了基础的Makefile。几分钟内,一个可运行的项目骨架就完成了。

第二阶段:核心功能实现

接下来是核心功能的开发。这个过程就像在和一位经验丰富的架构师对话。

鉴权系统

"实现一个API Key鉴权中间件,支持从Header和Query参数中获取Key,需要验证Key的有效性。"

AI生成了完整的鉴权中间件代码,包括:

  • 支持多种Key传递方式
  • 数据库查询验证
  • 错误处理
  • 日志记录

限流保护

"添加限流中间件,支持按IP和按API Key限流,使用Redis存储计数器。"

AI实现了基于令牌桶算法的限流器,并考虑了Redis连接池、超时处理等边界情况。

接口转发

"实现一个通用的接口转发功能,能够从数据库读取接口配置,转发请求到上游,并记录调用日志。"

这部分代码比较复杂,AI生成了:

  • 上下文感知的请求转发
  • 超时控制
  • SSRF防护
  • 调用日志记录

第三阶段:业务接口开发

有了基础框架,就可以开始添加具体的业务接口了。这个阶段我主要做的是"描述需求"。

天气接口

"添加一个天气查询接口,根据城市名称返回当前天气和7天预报。数据从公开的天气API获取,需要在网关层做缓存。"

AI实现了完整的天气接口,包括:

  • 上游API调用
  • 数据解析与转换
  • Redis缓存(6小时TTL)
  • 错误处理

热榜聚合

"实现一个热榜聚合功能,支持微博、知乎、抖音、微信、百度、B站、虎扑、36氪等平台的热榜数据获取。"

AI为每个平台生成了独立的数据抓取处理器,考虑了:

  • 反爬虫策略
  • 数据解析容错
  • 统一的返回格式
  • 缓存策略

其他实用接口

通过类似的方式,我陆续添加了:

  • 二维码生成
  • 图形验证码
  • IP归属地查询
  • 手机号归属地查询
  • ICP备案查询
  • 违禁词检测
  • 答案之书
  • 60秒读懂世界
  • 随机图片(头像/壁纸)
  • 大模型接口(支持OpenRouter和LLMHub)

第四阶段:后台管理系统

网关服务完成后,还需要一个管理后台。

"创建一个Nuxt 3项目作为后台管理系统,需要包括:用户管理、API Key管理、接口管理、调用统计等功能。"

AI生成了完整的后台系统,包括:

  • 登录认证
  • CRUD操作
  • 数据统计图表
  • 接口测试工具
  • 响应式布局

第五阶段:文档与部署

最后,AI帮我生成了完整的API文档,包括每个接口的详细说明、参数示例、响应格式等。

"生成一份完整的API文档,使用Markdown格式,包含所有接口的详细说明。"

文档不仅内容详实,还包含了cURL调用示例,方便用户快速上手。

部署方面,AI提供了Docker Compose配置文件,一键启动网关服务、MySQL、Redis和后台系统。

项目亮点回顾

回顾整个项目,有几个设计让我印象深刻:

1. 统一调用入口

网关提供了三种灵活的调用方式:

# 方式1:POST /v1/call,Body中指定slug
curl -X POST https://v1.uuhb.cn/v1/call \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ak_你的Key" \
  -d '{"slug":"weather-api","query":{"city":"北京"}}'

# 方式2:GET /v1/call/{slug}
curl -H "Authorization: Bearer ak_你的Key" \
  "https://v1.uuhb.cn/v1/call/weather-api?city=北京"

# 方式3:直接调用内置接口
curl -H "Authorization: Bearer ak_你的Key" \
  "https://v1.uuhb.cn/v1/weather?city=北京"

这种设计让用户可以根据场景选择最合适的调用方式。

2. 可选鉴权机制

后台可以为每个接口配置是否需要API Key。某些公开接口(如健康检查、验证码)可以设置为无需鉴权,提高访问便利性。

3. 智能缓存策略

不同类型的数据采用不同的缓存策略:

  • 热榜数据:30分钟
  • 天气数据:6小时
  • IP归属地:24小时
  • 手机号归属地:30天

4. 完善的日志记录

每次成功调用都会记录到数据库,包括用户ID、API Key ID、接口ID、调用时间等,方便统计和审计。

5. 大模型接口集成

项目集成了OpenRouter和LLMHub的大模型接口,支持:

  • 多模型动态路由
  • 流式响应(SSE)
  • OpenAI兼容格式
  • 免费模型自动接入

技术挑战与AI的解决方案

在开发过程中,遇到了一些技术挑战,AI都给出了优雅的解决方案。

挑战1:并发安全

问题:多个goroutine同时访问Redis计数器时可能出现竞态条件。

AI的解决方案:使用Redis的INCR命令的原子性,配合Lua脚本确保操作的原子性。

挑战2:错误处理

问题:上游接口可能返回各种错误,需要统一处理。

AI的解决方案:定义了统一的错误响应格式,并实现了错误解析和转换逻辑,确保用户始终收到清晰的错误信息。

挑战3:数据解析容错

问题:不同平台的热榜HTML结构可能变化,导致解析失败。

AI的解决方案:实现了多级容错机制,包括默认值、兜底数据源、降级策略等,确保接口始终可用。

项目成果

经过一段时间的开发,这个API网关项目已经具备了以下能力:

接口数量:30+ 个实用接口
支持平台:微博、知乎、抖音、微信、百度、B站、虎扑、36氪、堆糖等
功能模块

  • 热榜聚合
  • 数据查询(天气、IP、手机号、ICP)
  • 工具类(二维码、验证码、违禁词检测)
  • 娱乐类(答案之书、60秒新闻、随机图片)
  • 大模型接口

性能表现

  • 响应时间:<100ms(缓存命中)
  • 并发能力:1000+ QPS
  • 可用性:99.9%+

开发体验总结

这次"零代码"开发体验让我对AI编程有了新的认识:

优势

  1. 效率提升:传统需要几周的开发工作,几天内完成
  2. 质量保证:AI生成的代码通常遵循最佳实践
  3. 学习过程:通过AI的代码可以学习新的设计模式和编程技巧
  4. 专注业务:可以把精力放在业务逻辑上,而不是纠结语法细节

需要注意的问题

  1. 需求描述:需要清晰、准确地描述需求,否则AI可能理解偏差
  2. 代码审查:AI生成的代码仍然需要人工审查,特别是安全相关的部分
  3. 调试能力:当出现问题时,仍需要开发者具备调试和定位的能力
  4. 架构设计:AI可以帮助实现,但整体架构仍需开发者把控

未来展望

这个API网关项目还有很多可以扩展的方向:

  1. 更多接口:持续接入用户常用的第三方API
  2. 数据转换:提供更灵活的数据格式转换能力
  3. Webhook支持:支持Webhook方式推送数据
  4. API编排:支持多个接口组合调用
  5. 数据分析:提供更丰富的数据分析和可视化功能
上一页 下一页