SpringBoot可视化接口开发工具magic-api

hviger / 2024-01-24 / 原文

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>

2、配置application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/magic_api?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
magic-api:
  # 配置api管理页面入口
  web: /magic/web
  # 配置存储方式
  resource:
    # 配置接口资源存储位置,可选file、database、redis
    type: database
    # 存储表名
    tableName: magic_api_file
    # 使用database、redis存储时的key前缀
    prefix: /magic-api
    # 是否是只读模式
    readonly: false
  # 启用驼峰命名转换
  sql-column-case: camel
  # 分页配置
  page-config:
    # 页大小的请求参数名称
    size: size
    # 页码的请求参数名称
    page: page
    # 未传页码时的默认页码
    default-page: 1
    # 未传页大小时的默认页大小
    default-size: 10

3、在MySQL中创建数据库magic_api

4、启动项目,访问api管理界面

访问地址:http://localhost:8080/magic/web

编写接口代码

新增接口

先创建一个分组,然后在分组中创建一个新增接口,在编辑框中输入如下脚本;

// 使用body对象可以直接获取请求body中的参数
return db.table('pms_brand').insert(body);

在底部的接口信息中进行如下配置,POST请求,请求路径为/create,请求参数放在请求body中;
image

根据ID查询接口

在编辑框中输入如下脚本;

// 路径变量从path对象中获取
return db.table('pms_brand')
    .where()
    .eq('id',path.id)
    .selectOne();

在底部的接口信息中进行如下配置,GET请求,请求路径为/detail/{id},请求参数放在路径变量中;
image

修改接口

在编辑框中输入如下脚本;

return db.table('pms_brand').primary('id',body.id).update(body);

在底部的接口信息中进行如下配置,POST请求,请求路径为/update,请求参数放在请求body中;
image

分页查询接口

在编辑框中输入如下脚本;

return db.table('pms_brand').page();

在底部的接口信息中进行如下配置,GET请求,请求路径为/page,请求参数放在请求参数中(由于已经在application.yml中配置好了分页参数,可直接使用);
image

根据ID删除接口

在编辑框中输入如下脚本,删除只能使用update

return db.update('delete from pms_brand where id=#{id}');

在底部的接口信息中进行如下配置,POST请求,请求路径为/delete/{id},请求参数放在路径变量中;
image

参数验证

可以通过断言模块assert来进行参数验证,如下:

import assert;  //导入断言模块
//验证不通过时,会终止运行
assert.notEmpty(body.name,400,'名称不能为空!');
assert.notEmpty(body.firstLetter,400,'首字母不能为空!');
return db.table('pms_brand').insert(body);

image

自定义状态码

image

结果转换

比如我们想将showStatus转换为中文说明,并只返回三个需要的字段,在编辑框中输入如下脚本:

var list = db.table('pms_brand').select();
return list.map((item)=>{
    name : item.name,
    firstLetter : item.firstLetter,
    showStatus : item.showStatus? '不显示' : '显示'
});

访问该接口,在执行结果中可以发现,返回结果已经转换。
image

使用事务

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

参考资料

官方文档:https://ssssssss.org/

项目源码地址:https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-magic-api