一、Magic-api 介绍
一个基于Java的接口快速开发框架,通过magic-api提供的UI界面完成编写接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。
二、快速开始(官方)
数据库创建
创建一张测试表TestData
,结构如下
id | name |
1 | magicApi |
2 | xiaoDong |
DDL如下:
create table test_data
(
id bigint not null primary key,
name varchar(100) null
);
INSERT INTO test_data (id, name) VALUES (1, 'magicApi');
INSERT INTO test_data (id, name) VALUES (2, 'xiaoDong');
初始化工程
创建一个空的Spring Boot
工程, 以mysql
作为默认数据库进行演示。
添加依赖
引入Spring Boot Starter
父工程:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.3</version>
<relativePath/>
</parent>
引入magic-api-spring-boot-starter
依赖。
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
引入spring-boot-starter
,spring-boot-starter-web
, spring-boot-starter-test
, mysql
依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
配置
application.yml
server:
port: 9999
magic-api: #配置web页面入口
web: /magic/web
resource:
type: file
#type: database # 配置接口存储方式,这里选择存在数据库中 默认file
#table-name: magic_api_file # 数据库中的表名
#prefix: /magic-api # 前缀
#配置文件存储位置。当以classpath开头时,为只读模式
#mac用户请改为可读写的目录
#如果不想存到文件中,可以参考配置将接口信息存到数据库、Redis中(或自定义)
location: classpath:magic-api
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/magic-api-test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: test
访问api管理界面
启动项目之后,访问http://localhost:9999/magic/web
即可看到Web页面
三分钟写出查询接口
创建分组
点击创建分组按钮后,输入分组信息,点击创建。
新建接口
右键分组,点击新建接口。
在编辑器输入内容后,填写接口名称和及其路径。
var sql = """
select * from test_data
"""
return db.select(sql)
ctrl+s
保存后,即可访问接口。
访问接口
curl http://localhost:9999/test/test { "code": 1, "message": "success", "data": [{ "name": "magicApi" }, { "name": "xiaoDong" }], "timestamp": 1694001305333, "executeTime": 10 }
也可以通过web
界面执行。
三、插件
目前官方提供以下插件:
集群插件
定时任务插件
Redis插件
Mongo插件
Elasticsearch插件
Swagger插件
Git插件
SpringDoc插件
nebula插件
有兴趣的可以去看下,magic-api插件
四、脚本与Java交互
脚本调用Java
注入Spring Bean
// 第一种方式
import xx.xxx.xxx.xxx.UserService;
// 使用类名
return UserService.selectUserList();
// 第二种方式
import "userUservice" as userService;
// 使用Bean名
return userService.selectUserList();
调用静态方法
import xxx.xxx.xx.xx.xx.StringUtils;
return StringUtils.isBlank("");
调用普通方法
// 对于java.util、java.lang 包下的类,可以直接使用。
return new ArrayList();
// 对于其他类需要
importimport "java.text.SimpleDateFormat";
return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
调用magic-api的接口
// 可以在脚本中直接调用,非http方式
import "@get:/api/sys/user/list" as userList;
// 导入定义的GET请求的 /api/sys/user/list 接口。
// 脚本中变量是共享给调用者的。所以无需指定参数传入。只需要在本脚本中定义该变量即可。
return userList();
调用magic-api的函数
import "@/common/encode/md5" as md5;
// 导入页面上定义的函数信息
return md5('123456');
Java调用接口
调用接口
@Autowired
MagicAPIService service;
Map<String, Object> params = new HashMap<>();// 注入变量信息
params.put("id", 123);
// 内部调用接口不包含code以及message信息,同时也不走拦截器。
Object value = service.execute("GET", "/hello", params);
// 内部调用接口包含code以及message信息,同时也不走拦截器。
Object value = service.call("GET", "/hello", params);
调用函数
@Autowired
MagicAPIService service;
Map<String, Object> params = new HashMap<>();
// 注入变量信息
params.put("a", 1);
params.put("b", 1);
// 调用函数
Object value = service.invoke("/test/add", params);
保存资源
@Autowired
MagicResourceService service;
// 保存分组信息
service.saveGroup(group);
// 保存接口(ApiInfo)、函数(FunctionInfo)、数据源(DataSourceInfo)
service.saveFile(apiInfo);
删除资源
@Autowired
MagicResourceService service;
// 删除分组或文件
service.delete(id);
资源列表
@Autowired
MagicResourceService service;
// 获取分组下的所有文件
service.listFiles(groupId);
// 获取接口(api)、函数(function)、数据源(datasource)列表
service.files(type);
// 获取接口(api)、函数(function)、数据源(datasource)树结构
service.tree(type);
// 获取全部资源的树结构
service.tree();
其它API
除了以上列举的API
以外 MagicAPIService
还有
/**
* 上传
*/
boolean upload(InputStream inputStream, String mode) throws IOException;
/**
* 下载
*/
void download(String groupId, List<SelectedResource> resources, OutputStream os) throws IOException;
/**
* 推送
*/
JsonBean<?> push(String target, String secretKey, String mode, List<SelectedResource> resources);
/**
* 处理刷新通知
*/
boolean processNotify(MagicNotify magicNotify);
MagicResourceService
还有以下方法
/**
* 刷新缓存
*/
void refresh();
/**
* 移动
*
* @param src 源ID
* @param groupId 目标分组
*/
boolean move(String src, String groupId);
/**
* 复制分组
*
* @param src 源ID
* @param target 目标分组
*/
String copyGroup(String src, String target);
/**
* 获取文件详情
*/
<T extends MagicEntity> T file(String id);
/**
* 获取分组详情
*/
Group getGroup(String id);
/**
* 获取完整分组路径
*/
String getGroupPath(String groupId);
/**
* 获取完整分组名称
*/
String getGroupName(String groupId);
评论区