SpringBoot可视化接口开发工具magic-api
magic-api简介
magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象。
在SpringBoot中使用
1、添加magic-api相关依赖
<!--接口快速开发框架 magic-api-->
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
2、配置application.yml
server:
port: 8080
# spring配置
spring:
# 数据源配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/magic_api?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
# magic配置
magic-api:
# 配置api管理页面入口
web: /magic/web
# 配置存储方式
resource:
# 配置接口资源存储方式,默认file,可选database、redis
type: file
# 配置接口资源存储位置
location: D:/data/magic-api
# 启用驼峰命名转换
sql-column-case: camel
3、在MySQL中创建数据库magic_api
4、启动项目,访问api管理界面
访问地址:http://localhost:8080/magic/web
编写接口代码
新增接口
先创建一个分组,然后在分组中创建一个新增接口,在编辑框中输入如下脚本:
// 使用body对象可以直接获取请求body中的参数
return db.table('pms_brand').insert(body);
在底部的接口信息中进行如下配置,POST请求,请求路径为/create,请求参数放在请求body中;
根据ID查询接口
在编辑框中输入如下脚本:
// 路径变量从path对象中获取
return db.table('pms_brand')
.where()
.eq('id',path.id)
.selectOne();
在底部的接口信息中进行如下配置,GET请求,请求路径为/detail/{id},请求参数放在路径变量中;
修改接口
在编辑框中输入如下脚本:
return db.table('pms_brand').primary('id',body.id).update(body);
在底部的接口信息中进行如下配置,POST请求,请求路径为/update,请求参数放在请求body中;
分页查询接口
在编辑框中输入如下脚本:
return db.table('pms_brand').page();
在底部的接口信息中进行如下配置,GET请求,请求路径为/page,请求参数放在请求参数中(由于已经在application.yml中配置好了分页参数,可直接使用):
根据ID删除接口
在编辑框中输入如下脚本,删除只能使用update
return db.update('delete from pms_brand where id=#{id}');
在底部的接口信息中进行如下配置,POST请求,请求路径为/delete/{id},请求参数放在路径变量中;
参数验证
可以通过断言模块assert来进行参数验证,如下:
import assert; //导入断言模块
//验证不通过时,会终止运行
assert.notEmpty(body.name,400,'名称不能为空!');
assert.notEmpty(body.firstLetter,400,'首字母不能为空!');
return db.table('pms_brand').insert(body);
自定义状态码
结果转换
比如我们想将showStatus转换为中文说明,并只返回三个需要的字段,在编辑框中输入如下脚本:
var list = db.table('pms_brand').select();
return list.map((item)=>{
name : item.name,
firstLetter : item.firstLetter,
showStatus : item.showStatus? '不显示' : '显示'
});
访问该接口,在执行结果中可以发现,返回结果已经转换。
使用事务
magic-api也是支持事务的。使用db.transaction()方法即可,支持自动事务和手动事务。
还是以修改信息为例,先查询是否存在,如果存在则更新:
import assert;
var val = db.transaction(()=>{
var exist = db.table('pms_brand').where().eq('id',body.id).selectOne();
assert.notNull(exist,404,'找不到该记录!');
db.table('pms_brand').primary('id',body.id).update(body);
return v2;
});
return val;
集成Swagger
先在pom.xml中添加Swagger相关依赖:省略~
再在配置文件application.yml中添加Swagger相关配置:
magic-api:
# 集成Swagger配置
swagger-config:
# 文档名称
name: MagicAPI 测试接口
# 文档标题
title: MagicAPI Swagger Docs
# 文档描述
description: MagicAPI 测试接口信息
# 文档版本号
version: 1.0
# 文档资源位置
location: /v2/api-docs/magic-api/swagger2.json
Magic-API的特性
- 简化开发流程:无需定义Controller、Service、Dao、Mapper、XML等Java对象:通过magic-api提供的UI界面即可完成接口编写,自动映射为HTTP接口。
- 动态编译:基于magic-script脚本引擎,无需重启,实时发布。
- 支持多数据源配置:支持运行时动态添加数据源。
- 支持多种数据库:支持MySQL、MariaDB、Oracle、DB2、PostgreSQL、SQLServer等支持jdbc规范的数据库。
- 支持SQL缓存:以及自定义SQL缓存。
- 支持自定义JSON结果、自定义分页结果。
- 支持自定义工具类、自定义模块包、自定义类型扩展、自定义函数等。
- 支持对接口权限配置、拦截器等功能。
- 支持导入Spring中的Bean、Java中的类。
- 支持Swagger接口文档生成。
Magic-API的弊端
- 无法处理复杂业务逻辑:Magic-API主要适用于简单的HTTP接口开发,对于复杂的业务逻辑,需要结合其他框架或手动编写代码实现。
- 无法处理大型项目:Magic-API适用于小型项目的快速开发,对于大型项目,需要考虑更多的因素,如模块化、可扩展性、性能等,此时Magic-API可能无法满足需求。
参考资料
项目源码地址:https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-magic-api