Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!!
主题:Magic-Api
引言:
在现在的软件开发行业,高效的数据接口管理和快速开发是至关重要的,可以这么说,现目前已经有60%的公司已经开始使用低代码平台,还有40%的公司正在转向使用低代码平台的过程。大家都知道,传统的 Java 开发方式较为冗余,需要编写大量的代码来实现数据接口,从建立数据库连接、编写复杂的 SQL 查询语句到构建数据传输对象等一系列步骤,不仅耗时耗力,还容易出现错误。
那什么是低代码平台呢?为什么说低代码平台就可以提高接口开发效率和管理了吗?大家可以看一下这个图片
这个图片中我实现了一次sql查询,如果放在java’中,我需要新建配置文件、导入pom、为了规范呢我还得新建字段类、service,但是低低代码平台中仅需要三行代码去轻松实现!
今天要给大家介绍的 Magic-API 就是一个能够帮助开发者轻松实现这些目标的强大工具,也就是所谓的低代码平台。本文将为新手详细介绍如何快速上手 Magic-API,全是干货,让你一看就会。
第一:Magic-Api简介
上面也给大家介绍了这么多,相信大家也对低代码平台有个了解了,那么什么是magic-api呢?简单来说,Magic-API 是一个基于 Java 的在线接口文档管理和接口快速开发工具。它允许开发者通过可视化的方式快速创建和管理 API 接口,极大地提高了开发效率。
特点
Magic-API 所使用的脚本语言 Magic-Script,其语法与 Java 和 Javascript 存在相似之处,它融合了二者语法的长处,从而构建出一种全新的语言形式。其友好的语法特性使得学习该脚本语言的成本大幅降低,如此一来,开发者无需耗费精力去钻研那些陌生、奇特的语法规则以及特殊设定。低语法学习成本只是一方面,另一个显著提升开发效率的因素是,对 Magic-API 的代码进行修改后无需重启项目,这在开发中大大提高开发效率,并且magci-api可以在代码编写界面直接进行代码测试,无论是http请求还是查数据,都可以直接看到返回结果无需再借助第三方测试工具。
第二:快速上手
在开始上手前,大家需要有一定后端的开发只是,范围大概就是使用过maven、了解springboot、电脑也配置好了环境以及数据库。然后大家可以创建一张测试表TestData,结构如下
1、初始化工程
创建一个空的Spring Boot工程, 以mysql作为默认数据库进行演示。
2、添加依赖
作为演示demo,直接无脑复制粘贴即可
引入Spring Boot Starter父工程:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0</version>
<relativePath/>
</parent>
引入magic-api-spring-boot-starter依赖。
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
引入spring-boot-starter,spring-boot-starter-web, spring-boot-starter-test, mysql依赖。
<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>
<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>
3、配置application.yml文件
server:
port: 9999
magic-api:
#配置web页面入口
web: /magic/web
resource:
#配置文件存储位置。当以classpath开头时,为只读模式
#mac用户请改为可读写的目录
#如果不想存到文件中,可以参考配置将接口信息存到数据库、Redis中(或自定义)
location: D:/data/magic-api
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/magic-api-test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
4、启动项目并访问Api管理界面
1、2、3都完成后,我们直接启动项目,访问http://localhost:9999/magic/web 即可看到Web页面,或者关注启动信息,第三个就是
5、一分钟写出Demo接口
右键分组,点击新建接口。
在新建的接口这里输入下面代码,然后在页面下方填写好接口名称以及接口路径
var sql = """
select * from test_data
"""
return db.select(sql)
访问可以通过web界面执行也可以通过apifox(接口路径直接右键接口然后复制路径)。
这只是一个很简单的入门demo,但是大家应该也能通过以上几个步骤,去体验到低代码的便捷性,我们实现一个简单的查询功能。省去了Controller、Service、Dao、Mapper、XML、VO等模板代码的工作量,并且也降低bug的产出率,这对后端开发来说是非常友好且必要的。
第三:进阶用法
发送HTTP POST请求并拿数据
var url = "http://123.123.123:8880/test";
var data = {
"name":"xiaoqian"
}
var rows = http.connect(url).header({"Content-Type": "application/json"}).body(data).post().getBody();
获取请求内容
http://localhost:9999/xxx/xxx
name=abc&age=49
#这样的表单参数magic-api 也会自动将name和age映射为同名变量。
{
"name": "magic-api",
"version": "9.9.9"
}
#如要获取name属性 则可通过 body.name 来获取
定义函数
const test = ( test ) => {
test=1;
return test;
}
for循环
for(index,item in list){ //如果不需要index,也可以写成for(item in list)
System.out.println(index + ":" + item);
}
/*
结果:
0:1
1:2
2:3
*/
时间处理
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
var formatStr = "yyyy-MM-dd HH:mm:ss";
var format = DateTimeFormatter.ofPattern(formatStr);
// 获取指定日期 7 天之前的时间对象
var currentTime = LocalDateTime.now();
var nDaysAgoTime = currentTime.minus(7, ChronoUnit.DAYS);
// "2024-12-02 17:25:36" 字符串 转时间对象
var dateTimeStr = "2024-12-02 17:25:36";
var dateTimeObj = LocalDateTime.parse(dateTimeStr, format);
return {
"now": currentTime.format(format),
"origin": nDaysAgoTime.format(format),
"date: ": dateTimeObj.format(format)
}
类
// 定义一个 Person 对象
const NewPerson = () => {
Object Person = {
name: "Alice", // 属性
age: 30, // 属性e1
// 使用箭头函数来定义方法
greet: () => {
return "Hello, " + Person.name + ": " + Person.age;
},
// 修改属性的方法
setName: (newName) => {
Person.name = newName;
},
setAge: (newAge) => {
Person.age = newAge;
}
}
return Person;
}
var ps = NewPerson();
ps.setName("李白");
ps.setAge(1000);
// 调用方法
return ps.greet(); // 输出:Hello, 李白 :1000
四、Redis插件
引入依赖
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-plugin-redis</artifactId>
<version>2.1.1</version>
</dependency>
配置
# 以下配置均可省略
magic-api:
# 将接口信息存入到Redis中
resource:
type: redis # 存储方式改为redis
prefix: magic-api # 前缀
readonly: false #是否为只读模式
# 配置Redis
spring:
redis:
host: 192.168.1.29
port: 6379
database: 4
password: 123456
使用
import redis; //导入redis模块
var value = 'hello';
//通过redis.命令名(命令参数,命令参数,.....,命令参数) 进行调用,其中命令名不区分大小写
redis.set('key',value); //调用set命令
redis.setex('key',10,value); //调用setex命令
return redis.get('key'); //调用get命令
五、ElasticSearch插件
引入依赖
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-plugin-elasticsearch</artifactId>
<version>2.1.1</version>
</dependency>
配置
# 配置ElasticSearch
spring:
elasticsearch:
rest:
uris: http://127.0.0.1:9200
username: elastic
password: 123456789
使用
import elasticsearch; //导入redis模块
// 根据_id保存,当存在时更新,不存在时插入
elasticsearch.index('index名称').save(_id, data);
// 不指定_id插入
elasticsearch.index('index名称').insert(data);
// 指定_id插入,当_id存在时不会更新
elasticsearch.index('index名称').insert(_id, data);
// 根据_id删除
elasticsearch.index('index名称').delete(_id);
// 批量保存,当包含id时,则使用该列值匹配保存
elasticsearch.index('index名称').bulkSave(list);
// 根据_id修改
elasticsearch.index('index名称').delete(_id, data);
// 根据`DSL`语句搜索
elasticsearch.index('index名称').search(dsl);
elasticsearch.rest('url')
.parameter(key, value) // 添加请求参数
.parameters(map) // 批量添加参数
.put(data) // 执行put方法
.delete() // 执行delete方法,不带请求体
.delete(data) // 执行delete方法,带请求体
.post(data) // 执行post方法,带请求体
.get() // 执行get方法
六、定时任务插件
引入依赖
<dependency>
<groupId>org.ssssssss</groupId>
<artifactId>magic-api-plugin-task</artifactId>
<version>2.1.1</version>
</dependency>
配置
# 以下配置均可省略
magic-api:
task:
thread-name-prefix: magic-task- #线程池名字前缀
pool:
size: 8 #线程池大小,默认值为CPU核心数
shutdown:
awaitTermination: false #关闭时是否等待任务执行完毕,默认为false
awaitTerminationPeriod: 10s # 关闭时最多等待任务执行完毕的时间
使用
在引入插件之后,重启项目,页面左侧就能看到对应的定时任务了,新建之后,填入cron表达式,名字,脚本信息即可。
七、动态参数
演示
请求参数获取
RequestParam
GET http://localhost:9999/xxx/xxx?name=abc&age=49
这样的URL参数magic-api 会自动将name和age映射为同名变量。
表单参数
POST http://localhost:9999/xxx/xxx
name=abc&age=49
这样的表单参数magic-api 也会自动将name和age映射为同名变量。
Header参数获取
magic-api 会对所有RequestHeader统一封装为一个名为header的变量 如要获取 token 可以通过header.token 来获取
Request Body参数获取
对于RequestBody magic-api会将整个请求体映射为body变量,如:
{
"name": "magic-api",
"version": "9.9.9"
}
如要获取name属性 则可通过 body.name 来获取
如果提交的body为数组或者List, body为数组, 如需遍历,参考脚本语法。
Path参数获取
主要是针对URL定义为http://localhost:9999/user/{id} 的类似接口
如要获取path路径上的id可通过path.id 或 id来获取。
对于请求时使用了http://localhost:9999/user/1?id=2的请求, id变量的值将是RequestParam中的值,此时可以通过path.id 来避免冲突。
八、参考资料
https://www.cnblogs.com/zys2019/p/14842918.html#_label5
https://www.ssssssss.org/
https://gitee.com/dove_usst/magic-api-example.git
好了,朋友们,点点关注不迷路,喜欢的朋友们还请留下您的小赞赞,小弟会更加努力更新!!如果感兴趣的话,欢迎关注小弟公众号 【科技脉搏】!!!🥳🥳🥳