magicapi快速接口开发
magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口。 快速开始环境搭建
1,引入magic-api-spring-boot-starter依赖
org.ssssssss
magic-api-spring-boot-starter
1.7.1
2,application.yml 中配置
magic-api:
#配置web页面入口
web: /magic/web
resource:
# location: /data/magic-api
type: database # 配置接口存储方式,这里选择存在数据库中
table-name: magic_api_file # 数据库中的表名
3,启动服务,访问magic-api web页面
http://127.0.0.1:8035/magic-test/magic/web 界面说明
使用教程请求参数获取
1,RequestParam
GET http://localhost:9999/xxx/xxx?name=abc&age=49
这样的URL参数magic-api 会自动将name和age映射为同名变量
2,表单参数
POST http://localhost:9999/xxx/xxx
name=abc&age=49
这样的表单参数magic-api 也会自动将name和age映射为同名变量。
3,Request Header参数获取
magic-api 会对所有RequestHeader统一封装为一个名为header的变量 如要获取 token 可以通过header.token 来获取。
4,POST请求的Request Body参数获取
{
"name": "magic-api"
}
如要获取name属性 则可通过 body.name 来获取
5,Path参数获取
主要是针对URL定义为http://localhost:9999/user/{id} 的类似接口
如要获取path路径上的id可通过path.id 或 id来获取
6,Cookie,Session参数获取
可以通过cookie.xxx,session.xxx来获取SQL参数获取
1,#{} 注入参数,${} 拼接参数
作用和mybatis用法一致
id = #{id};
id=${id};
2,动态SQL参数
通过?{condition,expression}来实现动态拼接SQL,如果条件成立则拼接后部分内容SQL中,与mybatis中的if标签基本一致
return db.select("select * from sys_user ?{id,where id = #{id}}");
相当于mybatis中的
3,Mybatis 语法支持
1.6.0以后的版本支持Mybatis语法单表CRUD操作
操作入口 db.table("table_name")
1,insert
return db.table("sys_user").insert({ user_name : "李富贵", role : "admin"})
// insert into sys_user(user_name,role) values("李富贵","admin")
2,update
return db.table("base_dict").primary("code").update({ code: "insertTerst", name : "测试insert"})
//update base_dict set name = ? where code = ?
3,save
用法和insert相似
return db.table("sys_user").primary("id", uuid()).save({user_name: "李富贵"});
// insert into sys_user(id,user_name) values("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","李富贵");
4,select,page,where
return db.table("sys_user").select()
return db.table("sys_user").page()
return db.table("sys_user")
.where()
.like("user_name","%李富贵%")
.eq("role","admin")
.select()分页
yml中配置分页参数
magic-api:
page-config:
size: size # 页大小的请求参数名称
page: page # 页码的请求参数名称
default-page: 1 # 未传页码时的默认首页
default-size: 10 # 未传页大小时的默认页大小
自动分页
使用yml中配置的分页参数
return db.page("""select * from base_dict_detail""")
手动分页
跳过前3条记录,然后取5条
return db.page("""select * from base_dict_detail""",5,3)
自定义分页参数获取
实现 PageProvider接口,复写getPage方法 {
public Page getPage(RuntimeContext runtimeContext) {
long page = 2;
long pageSize = 3;
return new Page(pageSize, (page - 1) * pageSize);
}
此模式会覆盖yml的配置内容统一请求响应
目前内置了三种状态码,分别为 执行成功(1),参数验证失败(0),以及系统异常(-1)
自定义状态码
magic-api:
response-code-config:
success: 200 #执行成功的code值
invalid: 400 #参数验证未通过的code值
exception: 500 #执行出现异常的code值
默认返回格式
{
"code": 1, // 状态码
"message": "success", // 状态说明
"data": ..., // 返回的数据内容
"timestamp": 1629610503506, // 服务器时间
"executeTime": 1 // 执行时间
}
自定义返回格式
magic-api:
response: |- #配置JSON格式,格式为magic-script中的表达式
{
code: code,
message: message,
data,
timestamp,
requestTime,
executeTime,
}
自定义结构配置
实现ResultProvider接口,重写buildResult方法
Swagger文档生成
引入swagger依赖
在yml文件中配置
magic-api:
swagger-config:
version: 1.0.0
description: magic测试文档
title: magic测试
name: 配置化实现
location: /v2/api-docs/magic-api/swagger2.json原理分析
Magic-api通过springboot自动配置的方式配置了resource,dataSource,interceptor等内容。接口注册
在服务启动时,生成MagicConfiguration注入容器时,通过mappingHandlerMapping.registerAllMapping();来注册所有映射(即在界面上配置的接口请求地址和接口的实际处理类、方法的映射)。映射关系注册到handleMapping中,并在内存中通过ConcurrentHashMap来缓存映射关系
接口调用
接口调用时,在DispatcherServlet中通过url去寻找handler,找到magic-api的统一处理RequestHandler以及处理方法invoke。
在invoke中根据请求方法和路径获取接口信息封装在ApiInfo中,然后进行参数的验证封装。实际脚本的执行,以及对返回结果的包装
家里的老人耳朵有听力问题,请问助听器怎么配?对于听力下降的老年人,或者经过药物或手术治疗无效,病情稳定,有残余听力,并且期望改善言语交流的耳聋病人,均可配备助听器。应先了解病人听力的情况,根据病人对助听器的需求,还有结合听力
马斯克老妈嘲讽拜登你电动汽车演讲稿20年前写的吧马斯克与其母亲梅耶凤凰网科技讯北京时间11月23日消息,美国总统拜登近日在一次关于电动汽车未来的演讲中称赞了通用汽车,却没有提及特斯拉。遭到马斯克老妈嘲讽拜登的演讲稿是在20年前写
即将发布的三大国产旗舰手机对比第一款小米12消息爆料小米12这次会首批采用骁龙898处理器,镜头方面很可能会采用和K30S镜头类似的大眼萌设计,并且采用2亿像素的定制传感器,11。3超大底镜头,和最新的光学防抖
OPPOReno7真机亮相,颜值没得说,性能给力,11月25日发布OPPO手机这几年在国内外市场运营的都非常不错,从产品的设计到硬件软件优化,几乎做到了一流的用户体验,而今年一加手机业务更是并入了OPPO,让其产品线更加丰盈,消费者针对OPPO手
特斯拉事件再度反转,自动驾驶终将驶向何方?最近关于特斯拉的瓜着实让人吃得有点撑,前脚女司机维权事件的热度还没有退去,后脚失控追尾的特斯拉又不断新增,甚至出现了撞击警车的事件。面对这一切,特斯拉全球副总裁陶琳先是决不妥协,而
撕下这些手机的遮羞布,让我们看清缺点,才能用着舒心我觉得买手机不怕买到配置有阉割有缺点的机器,毕竟有些缺点可能其他人并不在意,也压根用不到,但手机市场仍然有厂商对外宣传全能配置品质旗舰旗舰杀手等等,手机厂商不会告诉你这款手机的缺点
华为荣耀手机能用几年?这个我有发言权!2016年秋天我买了一款上市不久的荣耀8,当时主要看中它像素高,拍照效果好,后来证实拍照效果的确不赖,购买价2200元。用了大概两年的时候,电视剧都拍不出来的惊奇情
荣耀50基本确认,高通提供助力,新荣耀能否再创佳绩?荣耀50虽然还没有发布,但基本信息已经确认得差不多了。时隔多年后荣耀又一次联手高通,那荣耀能否再次扬帆起航,帮助荣耀走出困境!高通骁龙778G还不具备挑大梁的实力!目前已经确认荣耀
618持币3000元,购买什么手机好?目前是五月,距离618还有整整一个月。就目前而言3000元的预算是可以买旗舰机型的,骁龙888870或天玑1200都不在话下。如果未来这一个月不会再有新机出现的话。那么性价比极高的
都2021年了,荣耀9x还值得买吗?先看看价格,看到这个价格,只能恭喜一下之前购买荣耀9X的用户了,因为荣耀9X升值了,现在664GB还要1500左右,6128GB都在1800左右了,说真的看到这个价格后,我很好奇这
跑步用什么手表比较好?悟空问答跑步用什么手表较好?跑步与走步(跑步走步数统计经验)根据我的经验35年!(AppleWatch)运动锻炼后,华为,苹果,非常有效!我很高兴朋友们也高兴。谢谢!我跑步从来不带