DataWay让编写接口变简单

本文详细介绍DataWay的搭建步骤及使用方法,包括数据库表结构创建、SpringBoot项目配置、DataWay功能启用及接口测试流程,助您快速掌握DataWay,提升项目迭代效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:本文为个人学习过程,仅限于学习使用。学习使我快乐,大家加油~

一、DataWay是什么

Dataway 是基于 DataQL
服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过
Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为
Dataway 开辟新的管理端口。 这种内嵌集成方式模式的优点是,可以使得大部分老项目都可以在无侵入的情况下直接应用
Dataway。进而改进老项目的迭代效率,大大减少企业项目研发成本。 Dataway 工具化的提供 DataQL
配置能力。这种研发模式的变革使得,相当多的需求开发场景只需要配置即可完成交付。从而避免了从数据存取到前端接口之间的一系列开发任务,例如:Mapper、BO、VO、DO、DAO、Service、Controller
统统不在需要。 基于Spring Boot - Hasor Release.Hasor-4.1.8 文档www.hasor.net

二、开始构建

1.首先,使用DataWay需要在你的数据库中有两张表:

CREATE TABLE `interface_info` (
    `api_id`          int(11)      NOT NULL AUTO_INCREMENT   COMMENT 'ID',
    `api_method`      varchar(12)  NOT NULL                  COMMENT 'HttpMethod:GET、PUT、POST',
    `api_path`        varchar(512) NOT NULL                  COMMENT '拦截路径',
    `api_status`      int(2)       NOT NULL                  COMMENT '状态:0草稿,1发布,2有变更,3禁用',
    `api_comment`     varchar(255)     NULL                  COMMENT '注释',
    `api_type`        varchar(24)  NOT NULL                  COMMENT '脚本类型:SQL、DataQL',
    `api_script`      mediumtext   NOT NULL                  COMMENT '查询脚本:xxxxxxx',
    `api_schema`      mediumtext       NULL                  COMMENT '接口的请求/响应数据结构',
    `api_sample`      mediumtext       NULL                  COMMENT '请求/响应/请求头样本数据',
    `api_create_time` datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `api_gmt_time`    datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
    PRIMARY KEY (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的API';

CREATE TABLE `interface_release` (
    `pub_id`          int(11)      NOT NULL AUTO_INCREMENT   COMMENT 'Publish ID',
    `pub_api_id`      int(11)      NOT NULL                  COMMENT '所属API ID',
    `pub_method`      varchar(12)  NOT NULL                  COMMENT 'HttpMethod:GET、PUT、POST',
    `pub_path`        varchar(512) NOT NULL                  COMMENT '拦截路径',
    `pub_status`      int(2)       NOT NULL                  COMMENT '状态:0有效,1无效(可能被下线)',
    `pub_type`        varchar(24)  NOT NULL                  COMMENT '脚本类型:SQL、DataQL',
    `pub_script`      mediumtext   NOT NULL                  COMMENT '查询脚本:xxxxxxx',
    `pub_script_ori`  mediumtext   NOT NULL                  COMMENT '原始查询脚本,仅当类型为SQL时不同',
    `pub_schema`      mediumtext       NULL                  COMMENT '接口的请求/响应数据结构',
    `pub_sample`      mediumtext       NULL                  COMMENT '请求/响应/请求头样本数据',
    `pub_release_time`datetime     DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间(下线不更新)',
    PRIMARY KEY (`pub_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 发布历史。';

create index idx_interface_release on interface_release (pub_api_id);

这两张表可以在dataway的依赖 jar 包中 “META-INF/hasor-framework/mysql” 目录下面找到,建表语句的写法是mysql数据库的写法,其他数据库应该作相应建表语句的修改。

2. 创建一个空Springboot项目

引入依赖包:

<!--
     hasor-spring 负责 Spring 和 Hasor 框架之间的整合。
     hasor-dataway 是工作在 Hasor 之上,利用 hasor-spring 我们就可以使用 dataway了。
-->
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-spring</artifactId>
    <version>4.1.3</version>
</dependency>
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-dataway</artifactId>
    <version>4.1.3-fix20200414</version><!-- 4.1.3 包存在UI资源缺失问题 -->
</dependency>


<--
     数据库相关依赖
-->
 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.17</version>
 </dependency>
 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.21</version>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.10</version>
  </dependency>

配置文件application.yml(对应修改相应位置参数)

# 是否启用 Dataway 功能(必选:默认false)
HASOR_DATAQL_DATAWAY: true
# 是否开启 Dataway 后台管理界面(必选:默认false)
HASOR_DATAQL_DATAWAY_ADMIN: true
# dataway  API工作路径(可选,默认:/api/)
HASOR_DATAQL_DATAWAY_API_URL: /api/
# dataway-ui 的工作路径(可选,默认:/interface-ui/)
HASOR_DATAQL_DATAWAY_UI_URL: /interface-ui/
# SQL执行器方言设置(可选,建议设置)
HASOR_DATAQL_FX_PAGE_DIALECT: mysql


# db相关配置
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://xxxxxxxx:3306/xxxxxxxx
    username: xxxxx
    password: xxxxx
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 3
      min-idle: 3
      max-active: 10
      max-wait: 60000
      stat-view-servlet:
        login-username: admin
        login-password: admin
      filter:
        stat:
          log-slow-sql: true
          slow-sql-millis: 1

新建一个ModuleDemo,实现接口SpringModule

import net.hasor.core.ApiBinder;
import net.hasor.core.DimModule;
import net.hasor.db.JdbcModule;
import net.hasor.db.Level;
import net.hasor.spring.SpringModule;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.sql.DataSource;

@DimModule
@Component
public class ModuleDemo implements SpringModule {
    @Resource
    private DataSource dataSource = null;

    @Override
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        // .DataSource form Spring boot into Hasor
        apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
    }
}

在SpringBoot启动类上添加注解 @EnableHasor() @EnableHasorWeb()

import net.hasor.spring.boot.EnableHasor;
import net.hasor.spring.boot.EnableHasorWeb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableHasor()
@EnableHasorWeb()
public class Dome01Application {

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

}

OK~至此,所有相关构架已经完成。

接下来启动项目,访问 (http://127.0.0.1:8080/interface-ui/#/)

当然,如果你修改了端口和dataway-ui 的工作路径,请自行修改访问地址。
在这里插入图片描述

如果出现这个页面,表示可以使用DataWay了~

三、使用方式

新建一个Interface,点击左上角的“+New”,进入新建页面。
在这里插入图片描述
在这里插入图片描述
发布后在点击左上角Interface查看发布的接口
在这里插入图片描述

我们可以点击接口最右边的小铅笔,进行编辑。

在接口前有Published说明此接口可以正常使用。

同时可以在当前页面测试此接口,如果有参数,需要在Parameters中编写条件(JSON格式),执行即可在下方JsonResult出看到结果。

当然,我们也可以在浏览器地址栏中访问刚才发布的接口

在这里插入图片描述

如果是带条件的SQL,可以这样创建接口:
在这里插入图片描述
然后,再保存测试发布~

访问测试:
在这里插入图片描述

OK~
至此我们也可以简单的使用DataWay了!

最后的最后:希望文章可以帮到大家,路过大神不喜勿喷,我们共同学习,加油吧!!!!

05-08
### 关于 Dataway 技术文档和使用教程 Dataway 是基于 Hasor 框架开发的一个接口配置服务工具,主要用于动态管理和维护 API 接口的定义与调用逻辑。以下是关于 Dataway 的一些关键技术信息以及可能的技术解决方案。 #### 1. 配置生效验证 当完成 Dataway 的基本配置后,在日志或控制台中可以看到类似于 `dataway api workAt /api/` 和 `dataway admin workAt /interface-ui/` 的提示信息[^1]。这表明 Dataway 已经成功启动并准备就绪。 #### 2. 整合 Spring 环境 通过引入 `hasor-spring` 组件,可以方便地将 Dataway 集成到现有的 Spring 应用程序中。这种集成不仅简化了依赖注入的过程,还允许开发者利用 Spring 提供的强大功能来增强 Dataway 的表现力[^2]。 #### 3. 数据表初始化 为了支持动态接口管理的功能,Dataway 需要预先创建一组数据库表结构用于存储接口元数据和其他运行时所需的信息。这些表格通常会在应用首次启动时自动构建,或者可以通过手动脚本的方式提前准备好[^2]。 #### 4. 实现自定义拦截器 如果希望增加额外的安全机制或者是性能优化措施,则可以编写自己的插件类继承自特定接口(如 `PreExecuteChainSpi`, `ResultProcessChainSpi`)。例如下面展示了一个简单的缓存处理方案: ```java public class ApiCacheSpi implements PreExecuteChainSpi, ResultProcessChainSpi { private Map<String, Object> cacheMap = new HashMap<>(); @Override public void preExecute(ApiInfo apiInfo, BasicFuture<Object> future) { String cacheKey = generateCacheKey(apiInfo); if (cacheMap.containsKey(cacheKey)) { future.setResultDirectly(cacheMap.get(cacheKey)); } } @Override public void processResult(Object result, ApiInfo apiInfo) { String cacheKey = generateCacheKey(apiInfo); cacheMap.put(cacheKey, result); } private String generateCacheKey(ApiInfo apiInfo){ // 构建唯一键值逻辑... return ""; } } ``` 此代码片段展示了如何通过预执行链 (`preExecute`) 来判断是否存在命中缓存的情况;而在结果返回之前则借助 `processResult` 方法更新内存中的记录[^3]。 #### 5. 利用 DataQL 进行复杂查询操作 无论是采用 MyBatis 执行器还是纯 SQL 方式,都可以轻松实现带有分页特性的请求响应模式。比如下述例子演示了怎样组合关键字搜索条件与其他限定项共同作用于最终的数据集筛选过程[^5]: ```javascript function main(keyword,futurestartdate,pageSize,pageNumber){ var pageQuery = dataSetFun( keyword, futurestartdate, pageSize, pageNumber); pageQuery.setPageInfo({ "pageSize": pageSize, "currentPage": pageNumber}); let res= {}; try{ res["pageData"] = pageQuery.data(); res["pageInfo"] = pageQuery.pageInfo(); }catch(e){ throw e; } finally{ return JSON.stringify(res); } }; ``` 以上函数接受四个输入参数,并按照既定规则组装好实际发送给后台服务器端的具体命令串之后再进一步提取有用部分作为输出呈现出来。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值