数据服务开发工具(Magic-API)

前言

对于数据开发人员来说,把数据通过api的方式提供出去,往往是数据开发的最后一公里。对于一个数据开发人员来说,通过自己写java或者其他代码提供数据服务往往比较困难,但是写SQL对他们来说是so easy,所以需要有一个工具通过SQL的方式快速提供API。搜索几方,发现已经有比较成熟的开源方案。

一、相关开源产品

Dataway https://www.hasor.net/doc/display/dataway

Magic-API ssssssss-team

Rocket-API-Platform rocket-api-platform: 服务端面向SQL开发API的低代码平台。来源于rocket-api,可以实现在页面上动态管理多数据源配置可以用于作统一的数据接口平台

功能Magic-apiDatawayRocket-api
开源协议MIT LicenseApache-2.0 LicenseApache-2.0 License
数据源支持支持关系型数据库,redis,mongodb,es插件方式支持,其他可以扩展;支持多数据源关系型数据库;支持多数据源关系型数据库,Mongodb,ClickHouse,其他可以扩展;支持多数据源
鉴权支持支持
脚本支持支持java导入,支持自定义脚本语言DataQL支持groovy语法
stars2.41.1k1.2k

3个对比,功能基本上都差不多;Magic-API对权限这块相对完善,脚本支持相对强大,所以选择Magic来搭建

二、Magic-API搭建

  1. 新建一个SpringBoot项目,依赖Web和JDBC

 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yft.cloud</groupId>
    <artifactId>yft-magic-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>yft-magic-api</name>
    <description>project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.23</version>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.2.0</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.jtds</groupId>
            <artifactId>jtds</artifactId>
            <version>1.3.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.增加配置

application.properties


server.port=9999
#配置web页面入口
magic-api.web=/magic/web
#配置文件存储位置。当以classpath开头时,为只读模式
magic-api.resource.location=/data/magic-api

#默认数据源
spring.datasource.url=jdbc:mysql://ip:3306/magic
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=app
spring.datasource.password=app

#登入鉴权
# 登录用的用户名
magic-api.security-config.username=admin
# 登录用的密码
magic-api.security-config.password=123456

4.编译启动

mvn clean package

编译目录下来 ~\yft-magic-api\target

java -jar yft-magic-api-0.0.1-SNAPSHOT.jar

5.文档信息

官方演示例子:magic-api

官方文档:magic-api

6.问题

1>编译的时候报 Input length = 1

解决方案:Springboot部署出现Input length = 1 或者Input length =2问题,导致maven install不成功_峰子_狂人的博客-CSDN博客

2>部署服务器出现这个的时候是因为编码的问题,

那么在idea中打开settings–Editor-File Econdings,设置yml为UTF-8,

如果还是不行,那么就将yml内容复制,把application.yml删除,再重新创建改文件,将内容放进去。

properties文件同理

三、Docker环境

1 准备工作

编译magic-api-plugin 项目 mvn clean package

把编译的包引入pom.xml,路径按实际情况修改

 <dependency>
            <groupId>org.d8s</groupId>
            <artifactId>magic-api-plugin-security-starter</artifactId>
            <version>1.1.1</version>
 </dependency>

pom.xml 增加,利用 dockerfile-maven-plugin 来制作Docker镜像

 

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

更新修改对应的版本

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

跟pom.xml同级目录创建Dockerfile文件

FROM java:8
#ARG JAR_FILE
RUN mkdir -p /opt/soft/magic/logs
#RUN mkdir -p /opt/soft/magic/config
#ADD src/main/resources/application.yml /opt/soft/magic
ADD target/yft-magic-api-0.0.1-SNAPSHOT.jar /opt/soft/magic/yft-magic-api.jar
#ADD target/lib /opt/soft/magic/lib
#ADD target/config /opt/soft/magic/config
#RUN cd /opt/soft/magic
ENTRYPOINT ["java","-jar","/opt/soft/magic/yft-magic-api.jar"]
EXPOSE 9999

2 镜像生成:

2.1 修改配置文件

修改配置文件:src/main/resources/application.yml  或者  application.properties

主要是数据库信息 spring.datasource.xxxx

2.2 镜像生成

如果需要外部加载jar包

手工下载 ojdbc6-11.2.0.3.jar,保存在一个目录(自动下载不过来)  ;没有用到oracle就去掉

mvn install:install-file -Dfile=/opt/tici/yft-magic-api/ojdbc6-11.2.0.3.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar  dockerfile:build -Dmaven.test.skip=true

不需要外部加载jar包

mvn clean package [dockerfile:build] -Dmaven.test.skip=true

3 镜像启动

docker network create --subnet=172.16.0.0/24 mynetwork

docker run -itd --net mynetwork --ip 172.16.0.2 -p 9999:9999 yft-magic-api:0.0.1-SNAPSHOT

四、鉴权配置

整体配置入口 magic-plugin

magic-plugin:
  denyGroupPath: system # 系统分组
  localIp: "127.0.0.1,localhost"  #全局白名单,目前没有开启
  auth:
    enable: true
    encryIndex: 9
    users:
      admin: 123456
      dev: 123456
    denyOptions:
      admin:
      dev: DELETE
  openauth:
    enable: true
  limiter:
    enable: true
    permits:
      per:
        second: 20
  iplimit:
    enable: true
  custauth:
    enable: true
  1. 登入

1.1 系统配置

没有在数据库配置,直接在配置文件中配置用户

magic-plugin:
  auth:
    enable: true    #开启验证
  users:
      admin: 123456   #用户:密码对,可以添加多个
      dev: 123456
    denyOptions:
      admin:          #用户:权限
      dev: DELETE

# 权限列表
NONE,
SAVE,
VIEW,
DELETE,
DOWNLOAD,
UPLOAD,
PUSH,
LOCK,
UNLOCK;

2.Token鉴权

每个用户 生成一个token,并且需要配置相应的role,匹配才能访问

2.1 系统配置

magic-plugin:
custauth:
    enable: true

2.2 后端配置

 

2.3 接口配置

 

3.验签

需要匹配 参数+sign,控制到具体参数,参数变化就访问不了

3.1 系统配置

  openauth:
    enable: true

3.2 后端配置

3.3 接口

 

 

原则上路径变量、请求body 都需要验证,目前基本也没什么用到,未测试,建议暂不使用

4.黑白名单

对每个api可以配置黑白名单,如果设置了白名单,以白名单为准来限制;如果白名单没有设置,以黑名单为准限制;不能两个都不设置,如果启用至少要设置一个。

4.1 系统配置

 iplimit:
    enable: true

4.2 后端配置

多个IP以逗号分割,目前只能控制具体ip,子网掩码还未支持。

 

4.3 接口配置

无需配置

5.限流

5.1 系统配置

  limiter:
    enable: true

5.2 后端配置

apache-jmeter-5.4.1测试工具  使用Jmeter进行http接口性能测试 - FeMiner - 博客园

这块配置效果测试有一定效果,但是还是不太清楚这几个参数

参数解释:

令牌速率:20

预热期:1

预热期单位:分

该接口每分钟产生令牌数20?

获取令牌的最大等待时间:获取令牌桶中一个令牌,最多等待3秒

 

5.3 接口配置

无需配置

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值