共计 4603 个字符,预计需要花费 12 分钟才能阅读完成。
作为 Java 后端开发,平时开发 API 接口的时候常常须要定义 Controller、Service、Dao、Mapper、XML、VO 等 Java 对象。咱们甚至应用代码生成器来通过数据库生成这些代码!有没有什么方法能够让咱们不写这些代码,间接操作数据库生成 API 接口呢?明天给大家举荐一款工具
magic-api
,来帮咱们实现这个小指标!
SpringBoot 实战电商我的项目 mall(40k+star)地址:https://github.com/macrozheng/mall
magic-api 简介
magic-api
是一个基于 Java 的接口疾速开发框架,编写接口将通过 magic-api
提供的 UI 界面实现,主动映射为 HTTP 接口,无需定义 Controller、Service、Dao、Mapper、XML、VO 等 Java 对象。
应用
上面咱们来波实战,相熟下应用
magic-api
来开发 API 接口。
在 SpringBoot 中应用
magic-api
原生反对 SpringBoot,可与 SpringBoot 无缝整合。
- 首先在
pom.xml
中增加magic-api
相干依赖;
<!-- 接口疾速开发框架 magic-api--> | |
<dependency> | |
<groupId>org.ssssssss</groupId> | |
<artifactId>magic-api-spring-boot-starter</artifactId> | |
<version>1.0.2</version> | |
</dependency> |
- 在配置文件
application.yml
中增加数据源及magic-api
相干配置;
spring: | |
datasource: | |
url: jdbc:mysql://localhost:3306/magic_api?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai | |
username: root | |
password: root | |
magic-api: | |
# 配置 api 治理页面入口 | |
web: /magic/web | |
# 配置存储形式 | |
resource: | |
# 配置接口资源存储地位,可选 file、database、redis | |
type: database | |
# 存储表名 | |
tableName: magic_api_file | |
# 应用 database、redis 存储时的 key 前缀 | |
prefix: /magic-api | |
# 是否是只读模式 | |
readonly: false | |
# 启用驼峰命名转换 | |
sql-column-case: camel | |
# 分页配置 | |
page-config: | |
# 页大小的申请参数名称 | |
size: size | |
# 页码的申请参数名称 | |
page: page | |
# 未传页码时的默认页码 | |
default-page: 1 | |
# 未传页大小时的默认页大小 | |
default-size: 10 |
- 在 MySQL 中创立数据库
magic_api
,因为咱们配置了应用数据库存储接口资源,所以须要先创立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`) | |
) |
- 再创立
pms_brand
表,用于测试;
CREATE TABLE `pms_brand` (`id` bigint(20) NOT NULL AUTO_INCREMENT, | |
`big_pic` varchar(255) DEFAULT NULL, | |
`brand_story` varchar(255) DEFAULT NULL, | |
`factory_status` bit(1) DEFAULT NULL, | |
`first_letter` varchar(255) DEFAULT NULL, | |
`logo` varchar(255) DEFAULT NULL, | |
`name` varchar(255) DEFAULT NULL, | |
`product_comment_count` int(11) DEFAULT NULL, | |
`product_count` int(11) DEFAULT NULL, | |
`show_status` bit(1) DEFAULT NULL, | |
`sort` int(11) DEFAULT NULL, | |
PRIMARY KEY (`id`) | |
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4; |
- 最初启动我的项目,拜访
magic-api
的 UI 界面,拜访地址:http://localhost:8080/magic/web
增删改查
接下来咱们将以商品品牌治理为例,体验下应用
magic-api
开发接口的快感!应用magic-api
开发 API 接口,仅需在界面中应用magic-script
脚本即可。
- 首先咱们来写个新增接口,先创立一个分组,而后在分组中创立一个
新增
接口,在编辑框中输出如下脚本;
// 应用 body 对象能够间接获取申请 body 中的参数 | |
return db.table('pms_brand').insert(body); |
- 在底部的
接口信息
中进行如下配置,POST
申请,申请门路为/create
,申请参数放在申请 body
中;
- 再来个依据 ID 查问的接口,在编辑框中输出如下脚本;
// 门路变量从 path 对象中获取 | |
return db.table('pms_brand') | |
.where() | |
.eq('id',path.id) | |
.selectOne(); |
- 在底部的
接口信息
中进行如下配置,GET
申请,申请门路为/detail/{id}
,申请参数放在门路变量
中;
- 再来个批改的接口,在编辑框中输出如下脚本;
return db.table('pms_brand').primary('id',body.id).update(body);
- 在底部的
接口信息
中进行如下配置,POST
申请,申请门路为/update
,申请参数放在申请 body
中;
- 再来个分页查问查问的接口,在编辑框中输出如下脚本;
return db.table('pms_brand').page();
- 在底部的
接口信息
中进行如下配置,GET
申请,申请门路为/page
,申请参数放在申请参数
中(因为曾经在application.yml
中配置好了分页参数,可间接应用);
- 再来个依据 ID 删除的接口,在编辑框中输出如下脚本,删除只能应用 update,这设计有点 …
return db.update('delete from pms_brand where id=#{id}');
- 在底部的
接口信息
中进行如下配置,POST
申请,申请门路为/delete/{id}
,申请参数放在门路变量
中;
参数验证
咱们能够通过断言模块
assert
来进行参数验证。
- 比方新增品牌的时候名称和首字母不能为空,在编辑框中输出如下脚本;
import assert; // 导入断言模块 | |
// 验证不通过时,会终止运行 | |
assert.notEmpty(body.name,400,'名称不能为空!'); | |
assert.notEmpty(body.firstLetter,400,'首字母不能为空!'); | |
return db.table('pms_brand').insert(body); |
- 在底部的
接口信息
中进行如下配置,POST
申请,申请门路为/test
,申请参数放在申请 body
中;
- 当咱们不增加
name
字段时,调用接口会返回咱们本人定义的错误信息和状态码。
后果转换
咱们能够应用 map 办法对查问数据进行转换,返回咱们想要的数据。
- 比方咱们想将
showStatus
转换为中文阐明,并只返回三个须要的字段,在编辑框中输出如下脚本;
var list = db.table('pms_brand').select(); | |
return list.map((item)=>{ | |
name : item.name, | |
firstLetter : item.firstLetter, | |
showStatus : item.showStatus? '不显示' : '显示' | |
}); |
- 拜访该接口,在执行后果中能够发现,返回后果曾经转换。
应用事务
在咱们应用 Java 开发接口的时候,少不了用到事务,当然
magic-api
也是反对事务的。应用db.transaction()
办法即可,反对主动事务和手动事务。
- 还是以批改品牌为例,先查问是否存在,如果存在则更新;
import assert; | |
var val = db.transaction(()=>{var exist = db.table('pms_brand').where().eq('id',body.id).selectOne(); | |
assert.notNull(exist,404,'找不到该品牌!'); | |
db.table('pms_brand').primary('id',body.id).update(body); | |
return v2; | |
}); | |
return val; |
- 在底部的
接口信息
中进行如下配置,POST
申请,申请门路为/test
,申请参数放在申请 body
中;
集成 Swagger
写了那么多接口,都是在
magic-api
的界面中进行调试的。如果你习惯应用 Swagger,magic-api
也能够和 Swagger 进行无缝整合。
- 首先在
pom.xml
中增加 Swagger 相干依赖;
<dependencies> | |
<!--Swagger-UI API 文档生产工具 --> | |
<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> |
- 在配置文件
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 |
- 拜访 Swagger 界面即可查看咱们在
magic-api
中写的接口了,拜访地址:http://localhost:8080/swagger…
总结
magic-api
是个很有意思的框架,能够通过在 UI 界面中应用简略的脚本,进行 API 接口的开发。不过作为一款小众框架,magic-api
还有很长一段路要走!
参考资料
官网文档:https://ssssssss.org/
我的项目源码地址
https://github.com/macrozheng…
本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家 Star!