# Apitool
**Repository Path**: jq1109lvr/apitool
## Basic Information
- **Project Name**: Apitool
- **Description**: Apitool接口平台
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-09-21
- **Last Updated**: 2023-10-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Apitool
## 项目名称
Apitool接口平台
## 项目简介
**Apitool**:一个提供API接口供开发者调用的网站。
用户可以注册登录。用户可以浏览接口并调用,并且每次调用会进行统计。
管理员可以发布接口、下线接口、修改接口信息。
实现可视化接口的调用情况,比如前三名调用最多的接口可视化。
## 业务功能
- 普通用户:注册登录、浏览接口、使用接口。
- 管理员发布接口、下线接口、新增接口、修改接口信息。
- 可视化接口调用接口。
**架构图:**
****
## 技术选型
### 前端
- React 18
- Ant Design Pro 5.x脚手架
- Ant Design & Procomponents组件库
- Umi 4前端框架
- OpenAPI前端代码生成
### 后端
- Java Spring Boot 2.7x 框架
- MySQL 8.x版本
- Mybatis-Plus 及 Mybatis X 自动生成
- API签名认证(Http调用)
- Spring Boot Starter(SDK开发)
- Dubbo 分布式(RPC、Nacos)
- Spring Cloud Gateway 微服务网关
- Swagger + Knife4j接口文档生成
- Hutool、Apache Common Util、Gson等工具库
## 项目模块
- apitool-frontend-master :项目前端,前端项目启动具体看readme.md文档
- apitool-common :公共封装类(如公共实体、公共常量,统一响应实体,统一异常处理),我们需要将其打包,在其他项目引用。
- apitool-back :项目主要的后端,接口管理平台,主要包括用户、接口相关的功能
- apitool-gateway :为网关服务,**涉及到网关限流,统一鉴权,统一日志处理,接口统计,接口数据一致性处理**
- api-interface:为接口服务,提供可供调用的接口,调用的接口就放在这个模块里面
- apitool-client-sdk:提供给开发者的SDK,相当于一个客户端发起请求调用,调用后被网关拦截鉴权等,符合要求放行后调用接口。
## 项目展示
- 登录页

- 注册页

- 首页

- 接口管理页

- 新增接口页

- 修改接口页

- 接口分析页
显示前三名

## 快速上手
### 后端
1. 将各模块配置修改成你自己本地的端口、账号、密码
2. 执行sql语句创建项目需要的数据库表(放在apitool-back模块下的sql包里)
3. 启动Nacos、Mysql、Redis.......没用到Redis就可以在apitool-back的application.yml中注释掉Redis
4. 将公共服务 api-common 以及客户端 SDK(apitool-client-sdk) 安装到本地仓库 (使用maven包管理工具install到本地仓库)
5. 按顺序启动服务
服务启动顺序参考:
在启动前一定先要把上面第三步的两个模块打包到本地仓库,不然在其他模块引入时是找不到的,因为本地仓库并没有这两个依赖。
1. apitool-back
2. apitool-gateway
3. apitool-interface
### 前端
环境要求
Node.js >= 16

安装依赖:
```
yarn
```
启动:
package.json文件下
```react
"start:dev": "cross-env REACT_APP_ENV=dev MOCK=none UMI_ENV=dev max dev",
```
## 知识补充
### 1.Node.js
- [Node.js官网](https://nodejs.org/zh-cn)
- [Node.js安装](https://blog.csdn.net/weixin_44893902/article/details/121788104?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168830138516800222823395%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168830138516800222823395&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-121788104-null-null.142^v88^koosearch_v1,239^v2^insert_chatgpt&utm_term=nodejs%E5%AE%89%E8%A3%85%E5%8F%8A%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE&spm=1018.2226.3001.4187)
在 Node.js 之前,JavaScript 只能运行在浏览器中,作为网页脚本使用,为网页添加一些特效,或者和服务器进行通信。有了 Node.js 以后,JavaScript 就可以脱离浏览器,像其它编程语言一样直接在计算机上使用,想干什么就干什么,再也不受浏览器的限制了。
Node.js 不是一门新的编程语言,也不是一个 JavaScript 框架,它是一套 JavaScript 运行环境,用来支持 JavaScript 代码的执行。用编程术语来讲,Node.js 是一个 JavaScript 运行时(Runtime)。
### 2.npm
npm 是 [Node.js](https://nodejs.org/zh-cn) 的包管理工具,用来安装各种 Node.js 的扩展。
npm 是 JavaScript 的包管理工具,也是世界上最大的软件注册表。有超过 60 万个 JavaScript 代码包可供下载,每周下载约 30 亿次。npm 让 JavaScript 开发人员可以轻松地使用其他开发人员共享的代码。
### 3.yarn
- [yarn官网](https://yarnpkg.com/)
- [yarn安装](https://blog.csdn.net/weixin_40808668/article/details/122606543?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168830157416800184147656%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168830157416800184147656&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-122606543-null-null.142^v88^koosearch_v1,239^v2^insert_chatgpt&utm_term=yarn%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4187)
Yarn是facebook发布的一款取代npm的包管理工具。
### 3. Spring Boot
Spring Boot 是一个用于简化创建独立的、基于生产级别的 Spring 应用程序的框架。它通过提供默认的配置和约定大于配置的方式,简化了 Spring 应用程序的开发过程,减少了开发者的配置工作。
Spring Boot 使用了一种名为 "约定优于配置" 的方式,它提供了一些默认配置和常用的依赖项,可以快速启动和运行应用程序。Spring Boot 还提供了自动配置和快速集成的能力,可以方便地集成其他常用框架和技术。
### 4. MyBatis 和 MyBatis-Plus
- [MyBatis 官网](https://mybatis.org/mybatis-3/zh/index.html)
- [MyBatis-Plus 官网](https://mp.baomidou.com/)
MyBatis 是一个持久层框架,用于将 Java 对象与数据库之间进行映射。它提供了简单且强大的 SQL 映射功能,可以通过 XML 配置或注解来实现对象与数据库表的映射关系,从而实现对数据库的增删改查操作。
MyBatis-Plus 是对 MyBatis 的增强,它提供了更加便捷的操作方法和功能。MyBatis-Plus 可以自动生成常用的增删改查 SQL,大大简化了编码工作。它还提供了分页查询、条件构造器、乐观锁、性能分析等功能,提高了开发效率和代码质量。
### 5. MySQL 数据库
MySQL 是一种开源的关系型数据库管理系统(RDBMS),被广泛应用于各种 Web 应用程序和软件开发项目。它具有稳定、高效、易用等特点,并支持大规模数据存储和高并发访问。
MySQL 使用 SQL(Structured Query Language)作为其查询语言,可以进行复杂的数据库操作,包括数据的增删改查、事务管理、用户权限控制等。
### 6.Hutool工具类库
[Hutool官方](https://hutool.cn/)
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
### 7.网关
为了让用户调用+1的代码复用,一般有拦截器、过滤器、AOP切面等实现方式。但是缺点是只存在于单个项目中,如果每个团队都开发自己的接口,需要重复实现自己的AOP切面。所以我们需要在网关实现!
**网关学习资料**
作用:
1.路由:[https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories)
2.负载均衡
3.统一鉴权
4.跨域 [https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration)
5.统一业务处理(缓存)
6.访问控制 (黑白名单)
7.发布控制(灰度发布) [https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-weight-route-predicate-factory](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-weight-route-predicate-factory)
8.流量染色(给请求头添加一些字段,标明来源)[https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-addrequestheader-gatewayfilter-factory](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-addrequestheader-gatewayfilter-factory)
9.接口保护
- 限制请求 [https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#requestheadersize-gatewayfilter-factory](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#requestheadersize-gatewayfilter-factory)
- 信息脱敏 [https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-removerequestheader-gatewayfilter-factory](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-removerequestheader-gatewayfilter-factory)
- 降级(熔断)[https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#fallback-headers](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#fallback-headers)
- 限流(令牌桶算法、漏桶算法,RedisLimitHandler可以了解一下)[https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-requestratelimiter-gatewayfilter-factory](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-requestratelimiter-gatewayfilter-factory)
- 超时时间 [https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#http-timeouts-configuration](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#http-timeouts-configuration)
- 重试 [https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-retry-gatewayfilter-factory](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-retry-gatewayfilter-factory)
10.统一日志
11.统一文档,建议用[https://doc.xiaominfo.com/docs/middleware-sources/aggregation-introduction](https://doc.xiaominfo.com/docs/middleware-sources/aggregation-introduction)
技术选型:[https://zhuanlan.zhihu.com/p/500587132](https://zhuanlan.zhihu.com/p/500587132)
- Nginx(全局网关)、Kong网关(API网关,Kong:[https://github.com/Kong/kong),](https://github.com/Kong/kong),)编程成本相对高
- Spring Cloud Gateway(取代了Zuul)性能高、可以用Java代码来写逻辑,适于学习
本项目网关使用 Spring Cloud Gateway,官方文档如下。

两种配置方式,先用配置式,不能满足要求再用编程式。
- 编程式(麻烦但是灵活)[https://spring.io/projects/spring-cloud-gateway/#samples](https://spring.io/projects/spring-cloud-gateway/#samples)
- 配置式(简单)
建议开启网关的级别为trace,方便在开发的过程中代码调试。
```xml
logging:
level:
org:
springframework:
cloud:
gateway: trace
```
### 8.Dubbo框架 (RPC 实现 )
**怎么调用其他项目的方法?**
1. 复制代码、依赖、环境。
2. HTTP请求(提供一个接口。供其他项目调用)
3. RPC
4. 把公共的代码打个jar包,其他项目去引用(客户端SDK)
**HTTP请求怎么调用?**
1. 提供方开发一个接口(地址、请求方法、参数、返回值)。
2. 调用方使用HTTP Client之类的代码包去发送HTTP请求。
**RPC**
作用:像调用本地方法一样去调用远程方法。
和直接HTTP调用的区别:
1. 对开发者更透明,减少了很多沟通成本。
2. RPC向远程服务器发送请求时,未必要使用HTTP协议,比如还可以使用TCP/IP,性能更高。(内部服务器更适合)
**RPC调用模型**

Dubbo框架是RPC的一种实现框架,其他的RPC框架还有如 GRPC、TRPC。
[Dubbo官方文档](https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/)
整合Nacos注册中心:https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/
服务调用项目和提供者尽量引入相同的依赖和配置
```xml
org.apache.dubbo
dubbo
3.0.9
com.alibaba.nacos
nacos-client
2.1.0
```
# 致谢
如果你喜欢这个项目,请给一个星星⭐支持并在Gitee上关注该项目。
欢迎访问 [Gitee 项目地址](https://gitee.com/jq1109lvr/user-rights) 获取最新代码和更多信息。
作者:Eliaukjq
邮箱:3131917861@qq.com