🚀 从0到1打造企业级API开放平台:IntelliHub项目

💡 为什么要做这个项目?

想法来源

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

页面前瞻

image.png

项目地址

https://github.com/DevYangJC/intelli_hub 目前项目还不完善还有很多bug,后续慢慢更新,希望小伙伴们一起加入进来,多提一些pr,一起完成一个大型项目的开发

项目定位

IntelliHub定位为企业级智能API开放平台,核心解决三个问题:

  1. 统一入口 - 所有API通过一个网关对外开放
  2. 统一安全 - 标准化的认证鉴权,防重放攻击
  3. 统一治理 - 完整的监控、统计、告警能力

🎯 需求分析:我想要什么?

核心需求梳理

我先画了一张思维导图(后来演变成了需求文档),明确了几个核心模块:

image.png

非功能需求

技术选型时,我特别考虑了几个点:

  • 高性能 - 网关使用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配置中心+注册中心二合一
RPCDubbo泛化调用支持动态路由
消息队列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管理列表(发布,下线,复制,历史,废弃,删除) image.png

创建API

image.png

API详情(文档,调试)

image.png

2. 实时监控统计

image.png

3. API市场

image.png

4. 开发指南

image.png

📊 项目成果

代码量统计

  • 后端代码:约15000行
  • 前端代码:约8000行
  • 配置文件:约2000行
  • 文档:6篇技术文档,共约8000字

技术亮点

  1. 双流量认证模型 - JWT + AppKey签名
  2. 动态路由 - 支持HTTP/Dubbo/Mock
  3. 泛化调用 - 网关无需依赖业务JAR
  4. 实时告警 - Redis + 定时任务
  5. 多租户架构 - 全链路数据隔离
  6. 事件驱动 - Kafka异步解耦
  7. 响应式编程 - WebFlux高性能网关

学到的经验

架构设计

  • 先搞清楚核心问题,不要为了技术而技术
  • 多画图,架构图、流程图、时序图都很重要
  • 先做MVP,不要一开始就追求完美

技术选型

  • 选择熟悉的技术栈,不要盲目追新
  • 考虑团队规模,微服务不是唯一选择
  • 性能和可维护性要平衡

开发节奏

  • 按模块拆分,先做核心链路
  • 频繁提交代码,小步快跑
  • 及时写文档,否则后面会忘

🎬 后续规划

短期计划(1-2个月)

  • 完善告警通知渠道(邮件、钉钉、企业微信)
  • 接入AIGC能力,智能分析调用异常
  • 添加API测试工具(类似Postman)
  • 支持GraphQL协议

长期规划(3-6个月)

  • 插件化架构改造
  • 支持灰度发布和流量染色
  • 接入链路追踪(SkyWalking)
  • API市场和计费系统
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
执笔经年
下载 APP