🚀 从0到1打造企业级API开放平台:IntelliHub项目
💡 为什么要做这个项目?
想法来源
在我刚刚作为java程序员进入社会开始打拼的时候,第一家公司我会经常用到开放平台,来将开发接口提供出去,时过境迁,五年时间已过,AI的浪潮已经将新人和老人的平衡打破,独立开发一个大型应用,也将不可能转化为可能,看到了鱼皮的开放平台,大概明白了技术要点,自己动手,打造一个企业级的API开放平台。回顾自己学习的内容,也打造一个自己的开源项目。
页面前瞻

项目地址
https://github.com/DevYangJC/intelli_hub 目前项目还不完善还有很多bug,后续慢慢更新,希望小伙伴们一起加入进来,多提一些pr,一起完成一个大型项目的开发
项目定位
IntelliHub定位为企业级智能API开放平台,核心解决三个问题:
- 统一入口 - 所有API通过一个网关对外开放
- 统一安全 - 标准化的认证鉴权,防重放攻击
- 统一治理 - 完整的监控、统计、告警能力
🎯 需求分析:我想要什么?
核心需求梳理
我先画了一张思维导图(后来演变成了需求文档),明确了几个核心模块:

非功能需求
技术选型时,我特别考虑了几个点:
- 高性能 - 网关使用WebFlux响应式编程
- 可扩展 - 微服务架构,支持水平扩展
- 可靠性 - Kafka削峰填谷,Redis高速缓存
- 易用性 - Vue3现代化前端,Element Plus组件库
🏗️ 架构设计:怎么搭建?
整体架构
我采用了微服务+事件驱动的架构:
▼text复制代码客户端 ↓ 网关(Spring Cloud Gateway) ↓ 业务服务集群 ↓ 数据存储(MySQL + Redis + Kafka + elasticSearch)
微服务架构图
▼text复制代码intellihub-parent // 整个平台的 Maven 父工程,统一管理子模块版本、依赖和插件配置 ├── inner-intergration // 内部通用组件与 Spring Boot Starter 集合,供各业务服务复用 │ ├── aop-spring-boot-starter // 面向切面编程自动配置:如日志埋点、性能监控、异常处理等 │ ├── common-dubbo-api // Dubbo 接口定义模块(API 层),包含服务间调用的 DTO 和接口契约 │ ├── common-helper // 通用工具类集合:日期、字符串、加密、ID 生成、校验等辅助方法 │ ├── common-interceptor-spring-boot-starter // Web 拦截器自动配置:如租户上下文解析、请求预处理等 │ ├── common-security-spring-boot-starter // 安全基础能力封装:JWT 解析、权限上下文、租户隔离等 │ ├── kafka-spring-boot-starter // Kafka 自动配置封装:生产者/消费者模板、序列化、错误重试等 │ ├── mybatis-helper-spring-boot-starter // MyBatis 增强封装:分页插件、逻辑删除、字段自动填充等 │ ├── pom.xml // inner-intergration 模块的 Maven 配置文件 │ ├── redis-cache-spring-boot-starter // Redis 缓存自动配置:缓存注解支持(@Cacheable)、连接池、序列化等 │ └── swagger-spring-boot-starter // Swagger/OpenAPI 自动集成:统一 API 文档入口、安全开关、UI 配置 ├── intelli-aigc-service // AIGC(人工智能生成内容)业务服务:提供文本生成、智能问答等 AI 能力 ├── intelli-api-platform-service // API 平台核心服务:管理 API 元数据、路由配置、文档、测试等 ├── intelli-app-center-service // 应用中心服务:管理第三方应用注册、AppKey/Secret、订阅关系等 ├── intelli-auth-iam-service // 身份认证与权限管理服务(IAM):用户、角色、权限、SSO、多租户体系 ├── intelli-event-service // 事件中心服务:处理系统内异步事件(如审计、通知、状态变更) ├── intelli-gateway-service // API 网关服务:路由转发、鉴权、限流、日志采集、协议转换等 ├── intelli-governance-service // 治理服务:服务注册发现、配置中心、熔断降级、指标监控等(若未用 Nacos/Sentinel 可能自研) ├── intelli-log-audit-service // 日志与审计服务:集中存储访问日志、操作日志,支持查询、告警、合规导出 ├── intelli-sdk // 开放平台 SDK:提供 Java/Python 等语言的客户端库,简化开发者接入 ├── intelli-search-service // 搜索服务:基于 Elasticsearch 实现全局搜索(API、应用、文档等) └── pom.xml // 根项目的 Maven 配置,定义所有子模块及公共依赖管理
关键设计决策
1. 双流量认证模型
这是我花了最多时间思考的设计。最终决定:
-
管理后台(
/api/**)→ JWT认证- 用户登录后获取Token
- 网关本地验签,性能更好
- 注入用户ID、租户ID到请求头
-
开放API(
/open/**)→ AppKey+签名认证- 类似AWS的签名机制
- HMAC-SHA256签名算法
- Timestamp + Nonce防重放攻击
为什么不用一套认证?
因为场景不同:
- 管理后台是人使用,需要登录态
- 开放API是系统调用,无状态更合适
2. 动态路由设计
这是最有技术含量的部分!
传统网关:配置写死,要改就得重启 我的方案:配置存数据库,网关动态加载
▼java复制代码// 网关根据path匹配路由配置 ApiRouteDTO route = routeService.matchRoute(path, method); // 根据backendType决定调用方式 if ("http".equals(route.getBackendType())) { // HTTP转发,支持服务名负载均衡 webClient.forward(route.getBackendHost()); } else if ("dubbo".equals(route.getBackendType())) { // Dubbo泛化调用,无需依赖业务JAR包 dubboService.invoke(route); }
- API配置变更无需重启网关
- 支持HTTP、Dubbo、Mock多种后端
- 通过Redis Pub/Sub实时刷新配置
调用日志怎么采集?很多人会想到直接写数据库。
我的方案:Kafka异步 + Redis实时统计
▼text复制代码请求 → 网关 → 同步返回响应 ↓(异步) 写Kafka消息 + 写Redis统计 ↓ 治理服务消费 → 落库 + 聚合分析
为什么这样设计?
- 性能考虑 - 网关是入口,不能阻塞
- 可靠性考虑 - Kafka保证消息不丢
- 实时性考虑 - Redis支持秒级告警
💻 技术实现:怎么落地?
技术选型
| 技术 | 选型 | 理由 |
|---|---|---|
| 网关 | Spring Cloud Gateway | 响应式,性能好 |
| 服务发现 | Nacos | 配置中心+注册中心二合一 |
| RPC | Dubbo | 泛化调用支持动态路由 |
| 消息队列 | Kafka | 高吞吐,日志采集首选 |
| 缓存 | Redis | 高性能,支持多种数据结构 |
| 数据库 | MySQL | 稳定可靠 |
| 聚合搜索 | ElasticSearch | 快速搜索 |
| 前端 | Vue3 + TS | 现代化,类型安全 |
开发过程的坑
坑1:WebFlux的Body只能读一次
问题:网关需要记录请求Body,但WebFlux读一次就没了 解决:写了一个CacheBodyFilter,在最开始缓存Body
坑2:多租户数据隔离
问题:每个SQL都要加tenantId条件,容易遗漏 解决:MyBatis Plus的租户插件 + ThreadLocal传递租户上下文
坑3:告警风暴
问题:一个API出问题,瞬间产生上千条告警 解决:引入冷却期机制,同一告警5分钟内只通知一次
✨ 核心功能展示
1. API生命周期管理
API管理列表(发布,下线,复制,历史,废弃,删除)

创建API

API详情(文档,调试)

2. 实时监控统计

3. API市场

4. 开发指南

📊 项目成果
代码量统计
- 后端代码:约15000行
- 前端代码:约8000行
- 配置文件:约2000行
- 文档:6篇技术文档,共约8000字
技术亮点
- ✅ 双流量认证模型 - JWT + AppKey签名
- ✅ 动态路由 - 支持HTTP/Dubbo/Mock
- ✅ 泛化调用 - 网关无需依赖业务JAR
- ✅ 实时告警 - Redis + 定时任务
- ✅ 多租户架构 - 全链路数据隔离
- ✅ 事件驱动 - Kafka异步解耦
- ✅ 响应式编程 - WebFlux高性能网关
学到的经验
架构设计
- 先搞清楚核心问题,不要为了技术而技术
- 多画图,架构图、流程图、时序图都很重要
- 先做MVP,不要一开始就追求完美
技术选型
- 选择熟悉的技术栈,不要盲目追新
- 考虑团队规模,微服务不是唯一选择
- 性能和可维护性要平衡
开发节奏
- 按模块拆分,先做核心链路
- 频繁提交代码,小步快跑
- 及时写文档,否则后面会忘
🎬 后续规划
短期计划(1-2个月)
- 完善告警通知渠道(邮件、钉钉、企业微信)
- 接入AIGC能力,智能分析调用异常
- 添加API测试工具(类似Postman)
- 支持GraphQL协议
长期规划(3-6个月)
- 插件化架构改造
- 支持灰度发布和流量染色
- 接入链路追踪(SkyWalking)
- API市场和计费系统
