注意看目录
1、magic-api 是什么
一个基于Java的接口快速开发框架,通过magic-api提供的UI界面完成编写接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发
2、magic-api 相关资料
官网:https://ssssssss.org
示例:ssssssss-team/magic-api-example
demo:https://magic-api.ssssssss.org
源码:magic-api: magic-api 是一个基于Java的接口快速开发框架,通过magic-api提供的UI界面完成编写接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发
quickstart:简介 | magic-api
3、入门
3.1 加入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
3.2 application.yaml 配置
magic-api:
web: /magic/web
resource:
location: classpath:magic-api
# type: database # 存到数据库
# table-name: magic_api_file # 表名
# prefix: /magic-api # ??
response-code:
success: 200 #执行成功的code值
invalid: 400 #参数验证未通过的code值
exception: 500 #执行出现异常的code值
backup: #备份相关配置
enable: true #是否启用
max-history: -1 #备份保留天数,-1为永久保留
table-name: magic_backup_record_v2 #使用数据库存储备份时的表名
swagger-config:
# 文档名称
name: MagicAPI
# 文档标题
title: MagicAPI Swagger Docs
# 文档描述
description: MagicAPI
# 文档版本号
version: 1.0
# 文档资源位置
location: /v2/api-docs/magic-api/swagger2.json
在服务启动后,在控制台可以看到访问地址。
4、数据库建表语句
最初的时候将配置文件放在mysql中,数据库建表语句如下。
CREATE TABLE `magic_api_file` (
`file_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`file_content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
PRIMARY KEY (`file_path`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
看到上面配置中备份开启了相关的配置,注:在每次修改的时候增量备份
CREATE TABLE `magic_backup_record_v2` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '原对象ID',
`create_date` bigint NOT NULL COMMENT '备份时间',
`tag` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签',
`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类型',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '原名称',
`content` blob COMMENT '备份内容',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作人',
PRIMARY KEY (`id`,`create_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
5、swagger配置
接口的对接使用swagger,官方也提供了方案。
pom中增加依赖,application中的配置在3.2中
<!-- swagger配置 start-->
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-plugin-swagger</artifactId>
<version>2.0.2</version>
</dependency>
<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>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.1</version>
</dependency>
application.yml中配置
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
注:这里加了两个UI,springfox-swagger-ui 是自带的,没有搜索功能,界面不怎么好
swagger-bootstrap-ui 界面比较友好,有搜索功能,也可以替换自己喜欢的其他UI
http://172.26.8.17:8080/swagger-ui.html
http://172.26.8.17:8080/doc.html
6、访问请求变量
request模块 | magic-api一个基于VuePress的 知识管理&博客 主题https://www.ssssssss.org/magic-api/pages/module/request/#%E5%BC%95%E7%94%A8%E6%A8%A1%E5%9D%97直接上文档
request模块 | magic-api一个基于VuePress的 知识管理&博客 主题https://www.ssssssss.org/magic-api/pages/module/request/#%E5%BC%95%E7%94%A8%E6%A8%A1%E5%9D%97
7、脚本中怎么使用java类
先导入,然后正常使用
import com.xin.util.DateUtil;
var shortDayStr = DateUtil.getShortDayStr(new Date());
8、多数据源配置
8.1 application.yml
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
datasource:
realtime:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://172.36.2.121:3306/realtime?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
username: xxx
password: xxx
history:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://172.36.2.121:3306/history?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
username: xxx
password: xxx
8.2 注册数据源到magic-api
主要是将数据源注册到MagicDynamicDataSource ,设置一个作为默认数据源
@Configuration
public class DataSourceConfig {
/**
* 实时数据库
*/
@Bean(name = "realtimeDs")
@ConfigurationProperties(prefix = "spring.datasource.realtime")
public DataSource dataSourceRealtime() {
return DataSourceBuilder.create().build();
}
/**
* 历史数据库
*/
@Bean(name = "historyDs")
@ConfigurationProperties(prefix = "spring.datasource.history")
public DataSource dataSourceHistory() {
return DataSourceBuilder.create().build();
}
/**
* 注入数据库到magic
*/
@Bean
public MagicDynamicDataSource magicDynamicDataSource(DataSource realtimeDs, DataSource historyDs) {
MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource();
// 设置默认数据源
dynamicDataSource.setDefault(realtimeDs);
dynamicDataSource.add("history", historyDs);
return dynamicDataSource;
}
}
在脚本中使用
// 默认数据源 ->realtimeDs
db.select(sql)
// 使用其他数据源
db.history.select(finalSql)
9、java代码中调用脚本代码
9.1 java代码
//注入服务
@Autowired
MagicAPIService magicAPIService;
// 调用http接口
magicAPIService.execute("get", "/state/road/event/type/count", null);
// 调用函数
Map<String, Object> params = new HashMap<>(1);
params.put("data", cacheList);
Object invoke = magicAPIService.invoke("/save_road_event", params);
9.2 脚本定义
函数定义如下,
var tableSql = """
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = '${dbName}'
AND TABLE_NAME in (#{tableNameList})
"""
var existTableList
if (dbName =='history'){
existTableList = db.history.select(tableSql)
}else if (dbName =='trans_road_net'){
existTableList = db.road.select(tableSql)
}else{
existTableList = db.select(tableSql)
}
var resultList = []
for (index,obj in existTableList){
var tableName = obj.TABLE_NAME
resultList.add(tableName)
}
return resultList
http接口正常定义,在传递参数的时候注意包装成map,参数的key为需要传递的参数名,作为上下文
10、脚本之间互相调用
10.1函数调用
函数定义见9.2
//引入函数
import '@/check_table' as check_table;
// 调用函数
var existTableList = check_table(inStr,DBEnum.TRANS_ROAD_NET.dbName)
10.2 接口间互相调用
import '@get:testtb' as testtb;
var tableNameList = "bz_map"
var dbName = "road_state_dev"
var l = testtb()
return l
可以看到函数和接口之间的区别在于接口前增加了请求方式
11、字符串替代
主要区别在于${}用于拼接SQL(会产生SQL注入问题),#{}会替换成占位符(不会产生SQL注入问题),这里的区别与Mybatis一致
因为我在开发中使用的表示动态表,在表名的替换上使用$,在参数上使用#
import request;
var fullDayStr = DateUtil.getFullDayStr(new Date());
var sql = """
SELECT
subdistrict,
speed,
degree,
b.max_time
FROM
subdistrict_speed_${fullDayStr}_realtime a,
( SELECT max( computedate ) max_time FROM subdistrict_speed_${fullDayStr}_realtime where district = #{district} ) b
WHERE
a.computedate = b.max_time
AND district = #{district}
ORDER BY
degree
"""
return db.road.select(sql);
12、生产环境的发布
主要是为了避免被修改,而且避免数据库的导入导出,所以直接打包到jar中
12.1 接口导出
右上角点击导出按钮,会导出一个压缩包
文章来源地址https://www.toymoban.com/news/detail-499044.html
12.2 解压后放到resources目录下
在resource目录下创建一个magic-api目录,将解压后的文件放到下面
12.3 修改配置
magic-api: web: /magic/web resource: location: classpath:magic-api
注意:官网上抄的classpath后会有空格,导致报错,中间没有空格
总结
magic-api 总体来说还是非常方便,在做一些中小型项目的时候可以轻易的解决问题,但是在一些对代码性能要求比较高,对代码自由度比较高的场景不太适合。
magic-api还有很多特性,因为在项目中没有使用,这次就没做探索
推荐书了:
19个新媒体大类(视频、音频、直播、社群、微博、社区团购、行业垂直、知识付费、信息资讯、传统电商、社交交友、运动健身、资讯搜索、地图导航、旅游、网站、浏览器、本地生活、其他热门App),引导新媒体全网运营;17个章带你打通全网数字化营销。
一本新媒体百科全书,让你用一本书实现新媒体全网运营一本通!
京东自营购买链接:https://item.jd.com/13808176.html
文章来源:https://www.toymoban.com/news/detail-499044.html
到了这里,关于使用magic-api ,让你的开发效率蹭蹭提升的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!