13 MagicAPI快速入门

2023-07-06  本文已影响0人  滔滔逐浪
经理:小王,隔壁组要读我们的数据,赶紧把接口程序做一下!
经理:小王,五年前的jsp项目,能不能把商品信息改造一下,做一个数据api?
经理:小王,明天要给可以做一个大屏展示,今天能把数据接口调好吗?、

王小面:我太难了@~@
经理:你还在手工写 RestController?试试 “接口配置服务” 啊


Magic-API 是什么

Magic-API是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口

image.png
无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。

简化所需Java知识背景,只要会写SQL,直接就能做数据

一、特点
支持常规关系型数据库,比如MySQL,Oracle等常见的
Redis、MongoDB、ES等非关系型,DataW等同类产品不支持
配置数据以文件形式存放,DataW等需要建个数据库存配置
支持在线调试
支持参数配置,比如必填、格式等等
支持Linq,做.net的觉得很好,未来可期
支持API实现上传下载
支持脚本中混排Java代码
支持脚本的版本管理
二、尝试使用
2.1 准备工作
数据库:MySQL

表:用户信息表 t_user


image.png

2.2 目标
不写Controller、Service、Dao等针对此表的Java代码
快速创建针对表CRUD的API
实现复杂的查询数据API
接口参数控制管理
三、开发步骤
3.1 创建新项目
1.新建SpringBoot项目:magicdemo,包名 com.demo.magic

2.pom.xml加入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.taotao</groupId>
    <artifactId>magicdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>magicdemo</name>
    <description>magicdemo</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.4.2</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.ssssssss</groupId>
            <artifactId>magic-api-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.taotao.magicdemo.MagicdemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

3.配置application.yml

简易配置,只需配置以下内容

magic-api:
  resource:
    location: d:/cfg/magic-api #配置文件存储位置。当以classpath开头时,为只读模式
  web: /magic/web #配置web页面入口


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource

如果需要,可以对magic-api的内容做更复杂的配置,例如:

magic-api:
  resource:
    location: d:/cfg/magic-api #配置文件存储位置。当以classpath开头时,为只读模式
  web: /magic/web #配置web页面入口
  page: # 可不配置, 后续内容全会用默认值
    size: size # 页大小的请求参数名称 缺省时为size
    page: page # 页码的请求参数名称 缺省时为page
    default-page: 1 # 自定义默认首页 缺省时为1
    default-size: 10 # 自定义为默认页大小 缺省时为10
  response-code: # 可不配置
    success: 200 #执行成功的code值
    invalid: 400 #参数验证未通过的code值
    exception: 500 #执行出现异常的code值


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource


复杂配置可对分页、状态码等内容做自定义,具体可参考官方文档 https://www.ssssssss.org/magic-api

配置完成后,启动boot项目,控制台将会出现以下文字:

********************************************当前服务相关地址********************************************
服务启动成功,magic-api已内置启动! Access URLs:
    接口本地地址:         http://localhost:8080/
    接口外部地址:         http://172.16.0.107:8080/
    接口配置平台:         http://172.16.0.107:8080/magic/web/index.html
    可通过配置关闭输出:  magic-api.show-url=false
********************************************当前服务相关地址********************************************

此时打开配置平台地址就可以使用了,完全不用写业务代码

3.2 配置CRUD的API

本阶段目标:

1.通过配置完成 t_user 表的CRUD功能实现

2.仅做脚本配置,不写任何一个java文件

3.2.1 创建分组

点击新建分组

组名:用户管理
路径:user

3.2.2 创建查询列表
1.右键分组user,新建接口

2.下方接口信息里输入:

请求方法:get
接口名称:查询全部用户
接口路径:listall

3.右侧的大文本框内,输入以下脚本

return db.table('t_user').select()

4.点击右上方运行,或者ctrl+Q,就会在下方控制台输出响应内容

{
    "code": 200,
    "message": "success",
    "data": [{
        "id": 1,
        "account": "xiaoming",
        "name": "小明",
        "gender": "男",
        "avatar": "https://www.qq.com/logo.png"
    }, {
        "id": 2,
        "account": "xiaohong",
        "name": "小红",
        "gender": "女",
        "avatar": "https://www.qq.com/logo2.png"
    }],
    "timestamp": 1660810934840,
    "executeTime": 30
}

我们第一个API就实现完成了。

此时可以使用发布路径调试,在浏览器访问 http://172.16.0.107:8080//user/listall

就会看到和调试相同的结果。

3.2.3 创建保存方法
保存API的实现,我们要求请求传入body,为json格式的t_user表内容,然后进行保存

1.右键分组user,新建接口

2.下方接口信息里输入:

请求方法:post
接口名称:保存新用户
接口路径:save

3.右侧的大文本框内,输入以下脚本

return db.table('t_user').insert(body)

4.在下方接口信息的请求body里,输入以下内容,t_user表的id设为自增,body不赋值

{
    "account": "xiaoling",
    "name": "小玲",
    "gender": "女",
    "avatar": "https://www.qq.com/face.png"
}


5点击右上方运行,就会在下方控制台输出响应内容

{
    "code": 200,
    "message": "success",
    "data": 4,
    "timestamp": 1660811763708,
    "executeTime": 22
}

5.此时查询数据库,就会看到新插入的记录了

3.2.4 创建更新方法

更新和保存很相似,仍然是通过post,将body内容更新数据表

1.前面步骤类似,创建update接口,脚本内容为:

# primary表示根据主键id进行更新
return db.table('t_user').primary("id").update(body)

2.测试body如下:

{
    "id": 3,
    "account": "xiaoling3",
    "name": "小玲3",
    "gender": "男",
    "avatar": "https://www.qq.com/face3.png"
}

结果提示成果,数据表内容也改了。

3.2.5 saveOrUpdate的实现

经常使用ORM的同学,习惯于用saveOrUpdate的方式,自动决定insert还是update,脚本里可以使用save实现:

# 1. 如果body里有id,则是update,否则是insert
db.table('t_good').primary('id').save(body)

# 2. 显式调用insert / update
db.table('t_good').primary('id').insert(body)
db.table('t_good').primary('id').update(body)

 public Integer saveDataSource(Long id, String url, String username, String password, String driverName) {
        Map<String, Object> params = new HashMap<>();
        params.put("name", "共享交换dbs" + id);
        params.put("key", "key_" + id);
        params.put("url", url);
        params.put("username", username);
        params.put("password", password);
        params.put("driverClassName", driverName);
        params.put("maxRows", -1);
        params.put("groupId", "datasource:0");
        params.put("type", "com.zaxxer.hikari.HikariDataSource");
//        params.put("id", "093fab55969543dc99f68eaef4e4067a");

        ResponseEntity<String> responseEntity = null;

        try{
            responseEntity = restTemplate.postForEntity(URL + "magic/web/resource/file/datasource/save", params, String.class);
            if(HttpStatus.OK.equals(responseEntity.getStatusCode())) {
                ObjectMapper objectMapper = new ObjectMapper();
                JsonNode jsonNode = objectMapper.readTree(responseEntity.getBody());
                String message = jsonNode.get("message").asText();

                if("success".equals(message)){
                    return 1;
                }else {
                    log.info(message);
                    return 0;
                }
            } else {
                log.info(responseEntity.getBody());
                return 0;
            }

        } catch (Exception e){
            log.info(e.getMessage());
            return 0;
        }

    }

上一篇下一篇

猜你喜欢

热点阅读