# 流石API
**Repository Path**: coder_dw/flowstone-amt
## Basic Information
- **Project Name**: 流石API
- **Description**: 提供API编排功能,可实现数据库到API的可视化转换,以及多系统API的整合;即可用于与低代码前端工具配合,为低代码前端提供接口,也可当成一个简单的ESB使用
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 59
- **Created**: 2024-09-25
- **Last Updated**: 2024-09-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 1. 流石API管理工具
可通过流程编排的方式完成API接口的低码配置功能;具体包含以下功能:
- 选择不同的数据库、表,配置查询条件,将其提供成接口向外提供;
- 通过编写SQL语句,将其转换成接口向外提供;SQL语句支持MyBatis语法;
- 通过前端配置功能完成外系统接口转发功能;
- 通过流程式的编排实现复杂的数据处理;
- 提供定时调用接口的功能;
- 支持JS/Groovy脚本执行来完成复杂逻辑处理;
- 自动生成接口文档,供调用方参考
- 便于扩展的节点类型,目前支持SQL、Table、Http、JS、Groovy五种节点,可方便在此基础上扩展更多节点,比如Kafka推送节点等;
- 关于数据源:目前仅支持MySql,后续扩展支持更多数据库类型;
# 2. 适用场景
- 当已经有了大屏或者其它前端低码工具,而后端接口仍旧需要定制开发时,可以使用本工具来进行后端接口的快速配置与开发;
- 在数据类的交付项目中,需要进行一些简单的数据抽取、加工及开发对应的数据接口时,可以使用本工具来完成替代这部分功能,从而能够快速完成数据加工处理、接口开发,提升交付效率。
# 3. 系统架构
## 3.1 系统功能架构
其中标黄部分暂未实现;
## 3.2 系统技术架构
## 3.3 系统交互架构
## 3.4 系统部署架构
# 4. 启动
## 4.1 开发启动
- 前端:node18版本;其它版本未经测试;直接npm run dev 即可连接本地启动的后端服务进行开发;
- 后端:JDK17版本及以上;需要有mysql服务器,并创建对应的数据库,相关地址可在application-dev.yml文件中修改;修改完成后直接启动ServiceApplication.java类即可;数据库初始化脚本通过liquibase自动执行;
- 注意Token域名默认是localhost,端启动后打开页面localhost:3000即可访问页面;默认用户密码:admin/admin123
## 4.2 使用docker直接启动现有镜像
镜像地址:swr.cn-east-3.myhuaweicloud.com/icarus-tools/flowstone-amt:v1.0.2
镜像内已集成mariadb/nginx,直接启动后即可通过浏览器打开页面进行测试;
启动命令示例:
```cmd
docker run -d -e SPRING_SECURITY_DOMAIN=localhost -p 3001:80 swr.cn-east-3.myhuaweicloud.com/icarus-tools/flowstone-amt:v1.0.2
```
注意:
- docker镜像相对于代码可能会有版本过期的问题,如若在使用镜像过程中存在某些问题,可以尝试自行使用代码进行启动,或者在线进行反馈;
- mariadb数据在容器销毁后,所修改的数据会丢失,如果需要保留,需要增加磁盘映射到/var/lib/mysql;
- 通过浏览器打开localhost:3001即可使用相关功能;默认登录用户与密码:admin/admin123
- SPRING_SECURITY_DOMAIN可以修改域名,如不指定,默认是localhost,以下命令将域名修改成test.com
```cmd
docker run -d -e SPRING_SECURITY_DOMAIN=test.com -p 3001:80 swr.cn-east-3.myhuaweicloud.com/icarus-tools/flowstone-amt:v1.0.2
```
修改成test.com或者其它域名后(即所有非localhost的域名),如果未做域名解析,需要本地配置hosts才可正常访问;
# 5. 界面
接口文档

接口列表

接口处理流程配置

JS脚本编辑

HTTP节点配置

SQL节点

支持MyBatis语法的SQL编辑及执行

接口测试

# 6. 接口调用
## 6.1 基础说明
管理前端测试时调用的接口为发布前的接口,此处只适合做测试用,而给到用户前端或者外系统调用时,需要将接口进行发布,使用发布后的接口进行调用。
通过前端调用接口时的路径:http://localhost:3000/api/dua/*,其中 * 表示的是所配置的接口路径;
通过后端服务直接调用时的路径:http://localhost:8080/dua/*;
比如通过前端调用的curl语句:
```curl
curl 'http://localhost:3000/api/dua/test/js' \
-H 'Cookie: access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdXBlciI6dHJ1ZSwibmlja25hbWUiOiJhZG1pbiIsInRlbmFudElkIjoic3lzIiwiaWQiOiJRSVFJTklVQkkiLCJ1c2VybmFtZSI6ImFkbWluIn0.OUSwVEJVqzSYQIfNou6jtv0N4Mil7H8bFXBOruquS70'
```
注意如果指定过域名需要将localhost修改成对应域名;端口也需进行相应修改;
## 6.2 通过管理端token调用
接口调用时需要包含有相应的Token信息,这个Token可以在管理端登录时获取;也可以手动调用该登录接口。
## 6.3 通过客户端模式调用
- 进入客户端管理功能,新增客户端;
- 使用clientId/clientSecret进行token换算,示例:
```curl
curl http://localhost:3000/api/auth/client-login?clientId=1838749028435689474&clientSecret=f812e3ea708446b98fd81fd4940cdec5
```
调用后将会返回一串字符串,复制在后续接口中调用
- 进行实际接口调用,使用cookie或者header中添加authorization,比如:
```curl
curl 'http://localhost:3000/api/dua/test/js' \
-H 'Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdXBlciI6dHJ1ZSwibmlja25hbWUiOiJhZG1pbiIsInRlbmFudElkIjoic3lzIiwiaWQiOiJRSVFJTklVQkkiLCJ1c2VybmFtZSI6ImFkbWluIn0.OUSwVEJVqzSYQIfNou6jtv0N4Mil7H8bFXBOruquS70'
```
# 7. 其它说明
本工具基础代码使用[流石代码生成](https://gitee.com/changkang/flowstone-code-generator)工具(Idea的插件)生成,这个插件也是本人所写的一个插件,通过定义代码模板的方式一键生成基于MyBatisPlus的基础代码及Liquibase脚本、前端页面;感兴趣的可以关注一拨。
# 8. 版本变更记录
## 主分支
- 接口可配置成游客模式进行免登录调用;
- 增加发布接口调用白名单控制功能;
- 增加限流功能;默认使用guava实现限流,如果有配置redis时使用redisson进行限流
- 增加客户端管理及客户端鉴权功能;
## v1.0.2
- 增加各种节点类型的示例接口
- 处理SQL节点测试参数配置异常问题;
- 处理编辑器第一次进入时无法编辑的问题;
- 优化WebSocket处理逻辑;
- 处理表节点获取表清单时,无法获取手动创建的表的问题;
## v1.0.1
- 完善接入方认证鉴权功能
- 接口类型为其它节点或者请求参数时,增加JSONPath解析功能,可通过a.b的方式进行多层级变量解析;
- 处理数据源无法录入密码的bug;
- 调试日志增加JSON格式化功能;
- 处理日志模块缺失导致前端无法启动问题;
## v1.0.0
- 基础版本