美文网首页
13 MagicAPI快速入门

13 MagicAPI快速入门

作者: 滔滔逐浪 | 来源:发表于2023-07-06 16:22 被阅读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;
            }
    
        }
    
    

    相关文章

      网友评论

          本文标题:13 MagicAPI快速入门

          本文链接:https://www.haomeiwen.com/subject/xanludtx.html