您的当前位置:首页magic-api(SpringBoot可视化接口开发工具)

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

2023-04-14 来源:六九路网
magic-api(SpringBoot可视化接⼝开发⼯具)

1.概述magic-api是⼀个基于Java的接⼝快速开发框架,编写接⼝将通过magic-api提供的UI界⾯完成,⾃动映射为HTTP接⼝,⽆需定义Controller、Service、Dao、Mapper、

XML、VO等Java对象。

只不过这种⽅式虽然简单,但⽆法处理复制的业务逻辑。对于复杂的业务逻辑,还是使⽤java代码进⾏实现。注意要保证⼆者的接⼝路径不重复。

2.实战演练2.1项⽬准备1)新建⼀个SpringBoot的项⽬,导⼊数据库需要的依赖:

mysql

mysql-connector-java runtime

com.alibaba druid 1.1.9

2)新建数据库和表

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) COLLATE utf8_bin DEFAULT NULL, `password` varchar(255) COLLATE utf8_bin DEFAULT NULL, `addr` varchar(500) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

3)在配置⽂件配置数据源

spring:

datasource:

type: com.alibaba.druid.pool.DruidDataSource

url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root

password: zys123456

2.2 加⼊magic-api1)在pom.xml中添加magic-api相关依赖:

org.ssssssss

magic-api-spring-boot-starter 1.2.1

2)在配置⽂件配置magic-api相关信息

magic-api:

# 配置api管理页⾯⼊⼝ web: /magic/web # 配置存储⽅式 resource:

# 配置接⼝资源存储位置,可选file、database、redis type: database # 存储表名

tableName: magic_api_file

# 使⽤database、redis存储时的key前缀 prefix: /db2020 # 是否是只读模式 readonly: false # 启⽤驼峰命名转换 sql-column-case: camel # 分页配置 page-config:

# 页⼤⼩的请求参数名称 size: size

# 页码的请求参数名称 page: page

# 未传页码时的默认页码 default-page: 1

# 未传页⼤⼩时的默认页⼤⼩ default-size: 10

3)创建表magic_api_file,⽤来存储接⼝的配置信息

CREATE TABLE `magic_api_file`(

`id` bigint(255) NOT NULL AUTO_INCREMENT, `file_path` varchar(255) DEFAULT NULL, `file_content` text, PRIMARY KEY (`id`))

默认是⽩⾊,可点击⽪肤设置⿊⾊。

4.基本⽤法4.1添加操作1)在接⼝列表中添加添加按钮,添加⼀个分组并设置分组前缀

2)在创建的分组中选择右键,新建⼀个接⼝,填写接⼝的相关信息和执⾏脚本,如下图:

右侧区域是编辑框,⾥⾯主要编写magic的执⾏脚本,添加如下脚本:

return db.table('user').insert(body);

在底部的接⼝信息中进⾏如下配置,POST请求,请求路径为/create,请求参数放在请求body中,是json字符串:

{

\"username\":\"zhangsan\", \"password\":\"123\", \"addr\":\"湖北武汉\"}

点击右上⾓的执⾏按钮,在执⾏结果中看到返回了success,说明添加成功。在数据库中查询,数据已经添加进来。

4.2修改操作1)添加修改的接⼝,输⼊执⾏脚本

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

2)在接⼝信息中进⾏如下配置,POST请求,请求路径为/update,请求参数放在请求body中:

修改id等于3的⽤户的密码和地址。

4.3删除操作1)添加删除的接⼝,输⼊执⾏脚本

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

2)在接⼝信息中进⾏如下配置,POST请求,请求路径为/del/{id},请求参数放在路径变量中:

3)点击执⾏按钮,会把数据删除,返回执⾏的结果。

4.4查询操作4.4.1根据id查询1)新建⼀个接⼝,添加执⾏脚本:

// 路径变量从path对象中获取return db.table('user') .where()

.eq('id',path.id) .selectOne();

2)在接⼝信息中进⾏如下配置,GET请求,请求路径为/one/{id},请求参数放在路径变量中:

3)点击执⾏按钮,若有数据,则会返回数据,没有数据则data的值是null

4.4.2 分页查询由于已在配置⽂件中配置了分页的参数信息,故这⾥直接使⽤。1)新建⼀个接⼝,添加执⾏脚本:

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

2)在接⼝信息中进⾏如下配置,GET请求,请求路径为/page,请求参数放在请求参数中:

3)点击执⾏按钮,若有数据,则会返回数据,没有数据则data的值是null。

5.magic语法详解5.1db模块(1)db是默认引⼊的模块,使⽤此模块操作数据库,需要使⽤return把结果返回。

(2)db.table()就指定了表名,可以使⽤期⾃带的⽅法进⾏查询等操作,但其只能对单表进⾏操作,多表⽆法使⽤。(3)除了使⽤⾃带的⽅法外,还可以⾃定义sql进⾏操作。具体见后⾯的章节

5.2⾃定义查询1)select()根据sql查询结果,返回的是list集合。

return db.select('select * from user')

若需要携带参数,可以使⽤#{}进⾏占位,其他查询类似:

return db.select('select * from user where id = #{id} ')

2)selectInt()根据sql查询结果,返回的是int值。

return db.selectInt('select count(*) from user')

3)selectOne()查询单个对象,其返回值必须是⼩于等于⼀条数据,不能超过⼀条。

return db.selectOne('select * from user where id = #{id} ')

使⽤db.tableI()⽅式进⾏对⽐:

return db.table('user') .where()

.eq('id',path.id) .selectOne();

两种⽅式的效果⼀样,只不过使⽤的模式不⼀样。4)selectValue()查询单个列的值。若查询结果是多条,则只会返回第⼀条数据的对应字段信息。

return db.selectValue('select username from user where id = #{id}');

5)page()分页查询。要传递分页的条件(当前页码page,每页条数size),会返回数据总条数和数据集合。

return db.page('select * from user')

使⽤db.tableI()⽅式进⾏对⽐:

return db.table('user').page()

两种⽅式的效果是⼀样的,可⾃由选择。6)update()

对于增删改操作,都可以使⽤此⽅法,不过⼀般删除会使⽤此⽅法,添加和修改均使⽤db.table()⽅式。原因是此⽅法必须使⽤get请求传递参数,不安全。

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

如根据id进⾏修改:使⽤post请求,把需要修改的字段和值使⽤json字符串⽅式传递即可,可参考4.2⼩节的说明。

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

6.集成Swagger当接⼝很多时,想查询接⼝及路径,Swagger是⼀个不错的选择。⽽magic也可以和Swagger进⾏⽆缝整合。1)导⼊Swagger相关依赖

io.springfox

springfox-swagger2 2.9.2

io.springfox

springfox-swagger-ui 2.9.2

2)在配置⽂件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

7.拦截器配置在开发环境,可以使⽤magic进⾏接⼝的开发,但是在正式环境中,其页⾯是不能暴露出来的,同时swagger在正式环境也不能暴露。故需要拦截器进⾏拦截,同时其⾃带SQL的拦截器,可以打印SQL的⽇志信息。新建⼀个类,进⾏配置,具体见源码:

/**

* 拦截器配置 */

@Component

public class MyInterceptor implements SQLInterceptor, HandlerInterceptor { Logger logger = LoggerFactory.getLogger(this.getClass()); @Value(\"${isAllowed}\") private Boolean isAllowed;

/***

* ⾃定义SQL拦截器,打印sql及参数 * @param boundSql * @param requestEntity */

@Override

public void preHandle(BoundSql boundSql, RequestEntity requestEntity) { logger.warn(\"执⾏的SQL===> \" + boundSql.getSql());

logger.warn(\"执⾏的SQL参数===> \" + Arrays.toString(boundSql.getParameters())); }

/**

* 配置资源拦截器,开发页⾯只能在开发中使⽤,在正式环境拦截 *

* @param request * @param response * @param handler * @return */

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { if (!isAllowed) {

Map result = new HashMap<>(); result.put(\"msg\", \"抱歉,未找到可访问资源!\"); result.put(\"status\", false);

response.setCharacterEncoding(\"utf-8\");

response.setHeader(\"Content-type\", \"text/html;charset=UTF-8\"); response.getWriter().write(JSON.toJSONString(result)); return false; }

return true; }}

另外还需要⼀个MVC的配置其注⼊拦截器和要拦截的资源:

/**

* mvc配置,注⼊拦截器 */

@Configuration

public class MyWebMvcConfigurer implements WebMvcConfigurer { @Autowired

private MyInterceptor myInterceptor;

@Override

public void addInterceptors(InterceptorRegistry registry) {

//addPathPatterns表⽰拦截所有请求,excludePathPatterns表⽰不拦截的请求

registry.addInterceptor(myInterceptor).addPathPatterns(\"/swagger-ui.html\").addPathPatterns(\"/magic/**\"); }}

这样⼀来,就可以通过修改isAllowed的值选择是否可访问。到这⾥,基本的接⼝开发已经完成,只需前端进⾏整合即可。

因篇幅问题不能全部显示,请点此查看更多更全内容