# insight-api
**Repository Path**: insight720/insight-api
## Basic Information
- **Project Name**: insight-api
- **Description**: 基于 Spring Cloud + Ant Design Pro 开发的分布式接口开放平台项目(仅供学习使用)
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: https://insightapi.cn
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-07-19
- **Last Updated**: 2023-07-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Java, SpringCloud, AntDesignPro, SpringCloudAlibaba
## README
# Insight API
     
> 注意:
>
> - 此项目主题来自 [程序员鱼皮]([liyupi (程序员鱼皮) (github.com)](https://github.com/liyupi)) 的 API 开放平台项目,但改动和增加的内容占绝大部分。
> - 按原本的项目设计,项目并没有完成,之后如果有更新都会遵循语义化版本规范。
> - 以展示为目的,项目目前已经部署上线,如需学习该项目可以联系我。
## 项目简介
Insight API 是一个分布式接口开放平台。开发者可以注册并登录平台,然后在平台下单获取接口资源,并通过申请密钥来使用平台提供的客户端 SDK,从而在自己的代码中轻松使用平台提供的接口资源。平台管理员可以接入并发布接口,统计分析各接口调用情况,并对平台用户进行管理。(用户部分基本开发完成,可供部署上线展示,管理员部分尚待开发)
## 主要技术选型
### 后端
- JDK 17
- Spring Boot 3
- MySQL 8 和 Mybatis-Plus 3.5
- Redis 7 和 Redisson 3.22
- RocketMQ 5
- Spring Security、Spring Session
- Spring Cloud 2022 (OpenFeign、Gateway)
- Spring Cloud Alibaba 2022 (Nacos)
### 前端
这主要是一个后端项目,前端以展示响应结果为主要目的。
- React 18
- Ant Design Pro 6 脚手架
## 项目亮点
项目涉及非常多细节,这里仅列出部分内容:
- api-client 包封装了 JDK 的 HTTP 客户端,它是一个可引入的客户端 SDK 依赖,同时也是一个 Spring Boot 的 Stater。
- api-common 包封装了事务工具类,提供在 Spring 事务上下文中的一些简便方法,此外还设计了部分自定义参数校验注解。
- api-security 包仿照源码实现了 Spring Security 的验证码登录,能够结合框架本身的许多安全功能。
- api-gateway 包自定义网关 Filter 实现了全局请求日志,并结合客户端 SDK 对 api-provider 包的请求设计了较为完善的验签流程。
- api-security 包和 api-facade 包使用 RocketMQ 消息队列的功能特性,设计了订单消息系统,支持分布式事务的最终一致性。
- Redis 使用方面,将其数据回滚考虑到事务回滚中,还使用脚本确保作用于幂等性的令牌验证操作是原子的,此外使用 Redisson 信号量统计和限制接口调用次数。
## 项目展示
- 项目地址:https://insightapi.cn
暂不提供测试账号,可以通过密码、手机或邮箱注册并登录。
虽然项目是分布式的,但部署在同一台服务器上,内存紧张,可能会有卡顿。
- 项目结构图
- 登录页面
- 测试调用页面

- 订单列表页面

- 订单消息系统流程图

- 网关验签和客户端 SDK 流程图
