Java接口配置框架magic-api

1. magic三大框架

magic-api
接口快速开发框架
基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发 。

magic-page-designer
在线页面快速开发平台
基于 vue 的在线页面快速开发平台,主要把所有的 vue 代码都改为在线配置,最终获得一个 json 格式的页面

spider-flow
新一代爬虫平台
基于Java实现的新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。

2. magic-api简介

今天给大家安利一款非常优秀的低代码平台,可以实现接口的动态配置发布,不需要编写代码。

magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。

上边是官方定义,简单来说就是之前我们开发一个接口,至少需要Controller,Service,Dao,Mapper文件,还需要各种配置,搭建启动springboot项目,发布完成,接口才能访问,接口才算完成。
而magic要做的就是通过UI界面动态的配置一下接口路径,出入参,点击保存,接口发布完成,即可访问,不需要编写代码,只需要简单配置,还支持事物,分页,http请求等数据库操作,有点类似于现在的低代码平台,对于一些非核心的字典呀等静态数据使用还是非常方便的,一款非常优秀的低代码框架,可以快速接口开发。

官网地址:https://www.ssssssss.org/
文档地址:https://www.ssssssss.org/magic-api/
演示地址:https://magic-api.ssssssss.org/

3. magic-api特点

特性

支持MySQL、MariaDB、Oracle、DB2、PostgreSQL、SQLServer 等支持jdbc规范的数据库
支持非关系型数据库Redis、Mongodb
支持集群部署、接口自动同步。
支持分页查询以及自定义分页查询
支持多数据源配置,支持在线配置数据源
支持SQL缓存,以及自定义SQL缓存
支持自定义JSON结果、自定义分页结果
支持对接口权限配置、拦截器等功能
支持运行时动态修改数据源
支持Swagger接口文档生成
基于magic-script脚本引擎,动态编译,无需重启,实时发布
支持Linq式查询,关联、转换更简单
支持数据库事务、SQL支持拼接,占位符,判断等语法
支持文件上传、下载、输出图片
支持脚本历史版本对比与恢复
支持脚本代码自动提示、参数提示、悬浮提示、错误提示
支持导入Spring中的Bean、Java中的类
支持在线调试
支持自定义工具类、自定义模块包、自定义类型扩展、自定义方言、自定义列名转换等自定义操作

4. magic-api框架搭建

4.1 创建数据库

CREATE TABLE `magic_api_file` (
  `file_path` varchar(512) NOT NULL,
  `file_content` mediumtext,
  PRIMARY KEY (`file_path`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

CREATE TABLE `magic_api_backup` (
  `id` varchar(32) NOT NULL COMMENT '原对象ID',
  `create_date` bigint(13) NOT NULL COMMENT '备份时间',
  `tag` varchar(32) DEFAULT NULL COMMENT '标签',
  `type` varchar(32) DEFAULT NULL COMMENT '类型',
  `name` varchar(64) DEFAULT NULL COMMENT '原名称',
  `content` mediumtext COMMENT '备份内容',
  `create_by` varchar(64) DEFAULT NULL COMMENT '操作人',
  PRIMARY KEY (`id`,`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

select * from magic_api_info;
CREATE TABLE `magic_api_info` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID主键',
  `name` varchar(64) DEFAULT NULL COMMENT 'magic名称',
  `address` varchar(64) DEFAULT NULL COMMENT 'api地址',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='魔术api';
-- 插入数据v
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (14, '鉴权API', '/auth/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (15, '用户API', '/user/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (16, '商品API', '/goods/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (17, '类目API', '/category/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (18, '订单API', '/order/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (19, '活动API-NEW', '/activity/**');
INSERT INTO `magic`.`magic_api_info`(`id`, `name`, `address`) VALUES (20, '营销API', '/marking/**');

4.2 创建springboot项目

在这里插入图片描述

4.3 引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>
        <!-- 以spring-boot-starter的方式引用 -->
        <dependency>
            <groupId>org.ssssssss</groupId>
            <artifactId>magic-api-spring-boot-starter</artifactId>
            <version>1.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--swagger-->
        <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>

4.4 application.yml配置

server:
  port: 9999
  # 配置静态资源启用 gzip 压缩
  compression:
    enabled: true
    min-response-size: 128
# 配置主数据源
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    url: jdbc:mysql://localhost:3306/magic?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
#  data:
    # 配置mongo数据源
#    mongodb:
#      host: localhost
#      port: 27017
#      database: magicapi
#      username: magicapi
#      password: 123456
  # 配置redis数据源
#  redis:
#    host: localhost
#    port: 6379
#    database: 4
#    timeout: 5000
logging:
  level:
    org:
      springframework:
        jdbc:
          core:
            JdbcTemplate: DEBUG #打印SQL
            StatementCreatorUtils: TRACE  #打印SQL参数
# magic配置
magic-api:
  web: /magic/web
  resource:
    type: database  # 配置接口存储方式,这里选择存在数据库中
    table-name: magic_api_file  # 数据库中的表名
    prefix: /magic-api  # 前缀
#    location: classpath:magic-api
# 其它配置请参考 https://ssssssss.org/config/

  # 权限配置
  security-config:
    username: admin # 登录用的用户名
    password: 123456 # 登录用的密码

  # 响应码配置
  response-code-config:
    success: 200 #执行成功的code值
    invalid: 400 #参数验证未通过的code值
    exception: 500 #执行出现异常的code值

  # swagger配置
  swagger-config:
    version: 1.0
    description: MagicAPI 接口信息
    title: MagicAPI Swagger Docs
    name: MagicAPI 接口
    location: /v2/api-docs/magic-api/swagger2.json

4.5 启动类

MagicApiApplication

package com.zrj.magic;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * magic-api
 *
 * @author zrj
 * @since 20210910
 */
@EnableSwagger2
@SpringBootApplication
public class MagicApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(MagicApiApplication.class, args);
    }

}

4.6 其他自定义类

其他剩下的都是一些定制化的配置类。详见magic-api-simple。
gitee地址:https://gitee.com/ssssssss-team/magic-api-example

magic-api 配置类MagicAPIConfiguration

package com.zrj.magic.configuration;

import com.zrj.magic.interceptor.CustomRequestInterceptor;
import com.zrj.magic.interceptor.CustomUIAuthorizationInterceptor;
import com.zrj.magic.provider.*;
import com.zrj.magic.scripts.CustomFunction;
import com.zrj.magic.scripts.CustomFunctionExtension;
import com.zrj.magic.scripts.CustomModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.ssssssss.magicapi.adapter.Resource;
import org.ssssssss.magicapi.config.MagicDynamicDataSource;
import org.ssssssss.magicapi.provider.GroupServiceProvider;
import org.ssssssss.magicapi.provider.PageProvider;

import javax.sql.DataSource;

/**
 * magic-api 配置类
 * 以下只配置了多数据源
 * 其它如果有需要可以自行放开 // @Bean 注释查看效果
 */
@Configuration
public class MagicAPIConfiguration {

    /**
     * 配置多数据源
     *
     * @see MagicDynamicDataSource
     */
    @Bean
    public MagicDynamicDataSource magicDynamicDataSource(DataSource dataSource) {
        MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource();
        dynamicDataSource.setDefault(dataSource); // 设置默认数据源
        dynamicDataSource.add("slave", dataSource);
        return dynamicDataSource;
    }

    /**
     * 配置自定义JSON结果
     */
    //@Bean
    public CustomJsonValueProvider customJsonValueProvider() {
        return new CustomJsonValueProvider();
    }

    /**
     * 配置分页获取方式
     */
    // @Bean
    public PageProvider pageProvider() {
        return new CustomPageProvider();
    }

    /**
     * 自定义UI界面鉴权
     */
    //@Bean
    public CustomUIAuthorizationInterceptor customUIAuthorizationInterceptor() {
        return new CustomUIAuthorizationInterceptor();
    }

    /**
     * 自定义请求拦截器(鉴权)
     */
    // @Bean
    public CustomRequestInterceptor customRequestInterceptor() {
        return new CustomRequestInterceptor();
    }

    /**
     * 自定义SQL缓存
     */
    // @Bean
    public CustomSqlCache customSqlCache() {
        return new CustomSqlCache();
    }

    /**
     * 自定义函数
     */
    // @Bean
    public CustomFunction customFunction() {
        return new CustomFunction();
    }

    /**
     * 自定义方法扩展
     */
    // @Bean
    public CustomFunctionExtension customFunctionExtension() {
        return new CustomFunctionExtension();
    }

    /**
     * 自定义模块
     */
    // @Bean
    public CustomModule customModule() {
        return new CustomModule();
    }

    /**
     * 自定义脚本语言
     */
    // @Bean
    public CustomLanguageProvider customLanguageProvider() {
        return new CustomLanguageProvider();
    }

    /**
     * 自定义列名转换
     */
    // @Bean
    public CustomMapperProvider customMapperProvider() {
        return new CustomMapperProvider();
    }

    /**
     * 自定义接口脚本加解密
     */
    // @Bean
    public CustomApiServiceProvider customApiServiceProvider(Resource resource, GroupServiceProvider groupServiceProvider) {
        return new CustomApiServiceProvider(resource, groupServiceProvider);
    }

}

5. magic实现验证

5.1 magic ui

访问地址:http://localhost:9999/magic/web/index.html
启动控制台输出

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

在这里插入图片描述

5.2 swagger

swagger地址:http://localhost:9999/swagger-ui.html#/
这个需要注解@EnableSwagger2,否则找不到。
在这里插入图片描述

  • 4
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于您的问题,我可以回答。在Magic-api中,您可以通过添加接口鉴权来提高接口的安全性。您可以使用API密钥、JWT Token等方式进行接口鉴权,以确保只有授权用户才能访问接口。在具体实现上,您可以在请求头中添加相应的授权信息,并在服务端对该信息进行验证,以确定用户是否有访问该接口的权限。 ### 回答2: 鉴权是用于验证API请求是否合法的一种安全措施。在使用magic-api添加接口鉴权时,可以采用以下步骤: 1. 生成密钥:首先,需要生成一个用于鉴权的密钥。可以使用常见的加密算法如HMAC-SHA256等来生成密钥。确保密钥具有足够的复杂度和安全性。 2. 将密钥配置magic-api:在magic-api配置文件中,添加一个鉴权相关的配置项,将生成的密钥配置到该项中。这个配置项可以是一个字符串,也可以是一个文件路径,存储密钥的值。 3. 添加鉴权中间件:在接口请求处理流程中,添加一个鉴权中间件。该中间件的作用是在请求到达API处理逻辑之前,对请求进行鉴权验证。通过读取配置的密钥,对请求的参数、头部信息等进行加密或签名,并与鉴权中间件请求中的加密或签名进行比对。 4. 验证鉴权结果:鉴权中间件会返回一个鉴权结果,通常可以是布尔值或者一个带有鉴权信息的对象。根据鉴权结果,可以决定是否允许继续处理该请求。如果鉴权失败,返回一个相应的错误信息,并拒绝该请求。 5. 日志记录:为了追踪和审计API请求的鉴权情况,可以在鉴权中间件中添加日志记录的功能。记录每个请求的鉴权结果、鉴权时间、请求参数等信息,以便后续的统计和分析。 通过以上步骤,可以在magic-api中添加接口鉴权功能,提高API的安全性和可靠性,确保只有经过合法鉴权的请求能够被正常处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值