关于java:绝了基于SpringBoot的可视化接口开发工具不再需要ControllerServiceDao

45次阅读

共计 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!

正文完
 0