Java接口配置框架magic-api
1. magic三大框架
magic-api
接口快速开发框架
基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发 。
magic-page-designer
在线页面快速开发平台
基于 vue 的在线页面快速开发平台,主要把所有的 vue 代码都改为在线配置,最终获得一个 json 格式的页面
spider-flow
新一代爬虫平台
基于Java实现的新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。
2. magic-api简介
今天给大家安利一款非常优秀的低代码平台,可以实现接口的动态配置发布,不需要编写代码。
magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。
上边是官方定义,简单来说就是之前我们开发一个接口,至少需要Controller,Service,Dao,Mapper文件,还需要各种配置,搭建启动springboot项目,发布完成,接口才能访问,接口才算完成。
而magic要做的就是通过UI界面动态的配置一下接口路径,出入参,点击保存,接口发布完成,即可访问,不需要编写代码,只需要简单配置,还支持事物,分页,http请求等数据库操作,有点类似于现在的低代码平台,对于一些非核心的字典呀等静态数据使用还是非常方便的,一款非常优秀的低代码框架,可以快速接口开发。
官网地址:https://www.ssssssss.org/
文档地址:https://www.ssssssss.org/magic-api/
演示地址:https://magic-api.ssssssss.org/
3. magic-api特点
特性
支持MySQL、MariaDB、Oracle、DB2、PostgreSQL、SQLServer 等支持jdbc规范的数据库
支持非关系型数据库Redis、Mongodb
支持集群部署、接口自动同步。
支持分页查询以及自定义分页查询
支持多数据源配置,支持在线配置数据源
支持SQL缓存,以及自定义SQL缓存
支持自定义JSON结果、自定义分页结果
支持对接口权限配置、拦截器等功能
支持运行时动态修改数据源
支持Swagger接口文档生成
基于magic-script脚本引擎,动态编译,无需重启,实时发布
支持Linq式查询,关联、转换更简单
支持数据库事务、SQL支持拼接,占位符,判断等语法
支持文件上传、下载、输出图片
支持脚本历史版本对比与恢复
支持脚本代码自动提示、参数提示、悬浮提示、错误提示
支持导入Spring中的Bean、Java中的类
支持在线调试
支持自定义工具类、自定义模块包、自定义类型扩展、自定义方言、自定义列名转换等自定义操作
4. magic-api框架搭建
4.1 创建数据库
CREATE TABLE `magic_api_file` (
`file_path` varchar(512) NOT NULL,
`file_content` mediumtext,
PRIMARY KEY (`file_path`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
CREATE TABLE `magic_api_backup` (
`id` varchar(32) NOT NULL COMMENT '原对象ID',
`create_date` bigint(13) NOT NULL COMMENT '备份时间',
`tag` varchar(32) DEFAULT NULL COMMENT '标签',
`type` varchar(32) DEFAULT NULL COMMENT '类型',
`name` varchar(64) DEFAULT NULL COMMENT '原名称',
`content` mediumtext COMMENT '备份内容',
`create_by` varchar(64) DEFAULT NULL COMMENT '操作人',
PRIMARY KEY (`id`,`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
select * from magic_api_info;
CREATE TABLE `magic_api_info` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID主键',
`name` varchar(64) DEFAULT NULL COMMENT 'magic名称',
`address` varchar(64) DEFAULT NULL COMMENT 'api地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='魔术api';
-- 插入数据v
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (14, '鉴权API', '/auth/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (15, '用户API', '/user/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (16, '商品API', '/goods/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (17, '类目API', '/category/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (18, '订单API', '/order/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (19, '活动API-NEW', '/activity/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (20, '营销API', '/marking/**');
4.2 创建springboot项目
4.3 引入依赖
<dependencies>
<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>
<!-- 以spring-boot-starter的方式引用 -->
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
4.4 application.yml配置
server:
port: 9999
# 配置静态资源启用 gzip 压缩
compression:
enabled: true
min-response-size: 128
# 配置主数据源
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
datasource:
url: jdbc:mysql://localhost:3306/magic?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
# data:
# 配置mongo数据源
# mongodb:
# host: localhost
# port: 27017
# database: magicapi
# username: magicapi
# password: 123456
# 配置redis数据源
# redis:
# host: localhost
# port: 6379
# database: 4
# timeout: 5000
logging:
level:
org:
springframework:
jdbc:
core:
JdbcTemplate: DEBUG #打印SQL
StatementCreatorUtils: TRACE #打印SQL参数
# magic配置
magic-api:
web: /magic/web
resource:
type: database # 配置接口存储方式,这里选择存在数据库中
table-name: magic_api_file # 数据库中的表名
prefix: /magic-api # 前缀
# location: classpath:magic-api
# 其它配置请参考 https://ssssssss.org/config/
# 权限配置
security-config:
username: admin # 登录用的用户名
password: 123456 # 登录用的密码
# 响应码配置
response-code-config:
success: 200 #执行成功的code值
invalid: 400 #参数验证未通过的code值
exception: 500 #执行出现异常的code值
# swagger配置
swagger-config:
version: 1.0
description: MagicAPI 接口信息
title: MagicAPI Swagger Docs
name: MagicAPI 接口
location: /v2/api-docs/magic-api/swagger2.json
4.5 启动类
MagicApiApplication
package com.zrj.magic;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* magic-api
*
* @author zrj
* @since 20210910
*/
@EnableSwagger2
@SpringBootApplication
public class MagicApiApplication {
public static void main(String[] args) {
SpringApplication.run(MagicApiApplication.class, args);
}
}
4.6 其他自定义类
其他剩下的都是一些定制化的配置类。详见magic-api-simple。
gitee地址:https://gitee.com/ssssssss-team/magic-api-example
magic-api 配置类MagicAPIConfiguration
package com.zrj.magic.configuration;
import com.zrj.magic.interceptor.CustomRequestInterceptor;
import com.zrj.magic.interceptor.CustomUIAuthorizationInterceptor;
import com.zrj.magic.provider.*;
import com.zrj.magic.scripts.CustomFunction;
import com.zrj.magic.scripts.CustomFunctionExtension;
import com.zrj.magic.scripts.CustomModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.ssssssss.magicapi.adapter.Resource;
import org.ssssssss.magicapi.config.MagicDynamicDataSource;
import org.ssssssss.magicapi.provider.GroupServiceProvider;
import org.ssssssss.magicapi.provider.PageProvider;
import javax.sql.DataSource;
/**
* magic-api 配置类
* 以下只配置了多数据源
* 其它如果有需要可以自行放开 // @Bean 注释查看效果
*/
@Configuration
public class MagicAPIConfiguration {
/**
* 配置多数据源
*
* @see MagicDynamicDataSource
*/
@Bean
public MagicDynamicDataSource magicDynamicDataSource(DataSource dataSource) {
MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource();
dynamicDataSource.setDefault(dataSource); // 设置默认数据源
dynamicDataSource.add("slave", dataSource);
return dynamicDataSource;
}
/**
* 配置自定义JSON结果
*/
//@Bean
public CustomJsonValueProvider customJsonValueProvider() {
return new CustomJsonValueProvider();
}
/**
* 配置分页获取方式
*/
// @Bean
public PageProvider pageProvider() {
return new CustomPageProvider();
}
/**
* 自定义UI界面鉴权
*/
//@Bean
public CustomUIAuthorizationInterceptor customUIAuthorizationInterceptor() {
return new CustomUIAuthorizationInterceptor();
}
/**
* 自定义请求拦截器(鉴权)
*/
// @Bean
public CustomRequestInterceptor customRequestInterceptor() {
return new CustomRequestInterceptor();
}
/**
* 自定义SQL缓存
*/
// @Bean
public CustomSqlCache customSqlCache() {
return new CustomSqlCache();
}
/**
* 自定义函数
*/
// @Bean
public CustomFunction customFunction() {
return new CustomFunction();
}
/**
* 自定义方法扩展
*/
// @Bean
public CustomFunctionExtension customFunctionExtension() {
return new CustomFunctionExtension();
}
/**
* 自定义模块
*/
// @Bean
public CustomModule customModule() {
return new CustomModule();
}
/**
* 自定义脚本语言
*/
// @Bean
public CustomLanguageProvider customLanguageProvider() {
return new CustomLanguageProvider();
}
/**
* 自定义列名转换
*/
// @Bean
public CustomMapperProvider customMapperProvider() {
return new CustomMapperProvider();
}
/**
* 自定义接口脚本加解密
*/
// @Bean
public CustomApiServiceProvider customApiServiceProvider(Resource resource, GroupServiceProvider groupServiceProvider) {
return new CustomApiServiceProvider(resource, groupServiceProvider);
}
}
5. magic实现验证
5.1 magic ui
访问地址:http://localhost:9999/magic/web/index.html
启动控制台输出
********************************************当前服务相关地址********************************************
服务启动成功,magic-api已内置启动! Access URLs:
接口本地地址: http://localhost:9999/
接口外部访问地址: http://10.255.1.46:9999/
接口配置平台: http://10.255.1.46:9999/magic/web/index.html
可通过配置关闭输出: magic-api.show-url=false
********************************************当前服务相关地址********************************************
5.2 swagger
swagger地址:http://localhost:9999/swagger-ui.html#/
这个需要注解@EnableSwagger2,否则找不到。