后端神器Dataway入门

本文介绍了Dataway框架,特别是Hasor的微内核与插件化设计,展示了Dataway如何通过配置服务快速搭建接口,以及在报表展示、数据录入、聚合查询等场景中的应用。Dataway通过DataQL简化开发流程,提升项目迭代效率和成本控制。

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

Dataway框架概述

Hasor简介

Hasor是由多个不同系列框架组合而成的一个框架体系。这些子框架的能力涵盖了IoC、Aop、WebMVC、数据库以及其他的方方面面。这一切的基础要归功于Hasor的插件化能力。

**Hasor的特点:**Hasor的设计思想是“微内核+插件”。微内核是指提供少量的必要功能的支持,其余功能全部通过插件化方式实现。这样扩展就可以通过添加插件而不需要修改核心框架。
在这里插入图片描述

Dataway接口配置服务
Dataway介绍

Dataway是基于DataQL服务聚合能力,为应用提供一个接口配置工具。是的使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过Dataway提供的UI界面完成。UI会以jar包放上提供并集成到应用中并和应用共享同一个http端口,应用无需单独为Dataway开辟新的管理端口。

优点可以是的大部分老项目都可以在无侵入的情况下直接应用Dataway。进而改进老项目的迭代效率,大大减少企业研发成本。

在这里插入图片描述

Dataway工具化的提供了DataQL配置能力。这种研发模式的变革使得,相当多的需求开发场景只需要配置即可完成交付。从而避免了从数据存取到前端接口之间一系列的开发任务。

Dataway的主打场景
  1. 取数据

    • 在一些报表、看板纯展示类的项目中。所有接口可通过配置实现。所有取数逻辑全部通过DataQL+SQL方式满足。

    • 对比往期项目对于后端技术人员的需求从3~5人通宵加班,直接缩减为1人配置化搞定

    • 即使要开发新逻辑,通过DataQL+SQL方式也可以快速完成。

  2. 存数据

    • 如在某个ERP项目中,20多个表单页面。每个表单页面或多或少都有直接将单据数据录入到数据库的场景,每个单据的录入逻辑都有很大的不同,我们通过DataQL+SQL方式在早期用1000行左右的核心代码。其他数据存取逻辑全部配置化完成。

    • 随着DataQL工具链完善,其中绝大部分场景都可以完成配置化无需开发。

  3. 数据聚合

    • 和GraphQL相同,这是设计DataQL的初衷。将数据库和服务等多个接口进行汇聚然后返回给前端,这是DataQL的使命。Dataway使这一过程变得更加简单和高效。
Dataway的技术架构
  • Dataway的架构中需要两张数据库表用来存放配置和发布的DataQL查询。
    在这里插入图片描述

ORM误区:

  • ORM最大的特点是具有Mapping过程,然后通过框架进行CRUD操作。如:Mybatis、Hibernate
  • DataQL有很大不同,虽然DataQL提供了非常出色的基于SQL数据存取能力。但DataQL没有Mapping过程。
  • 造成OEM错觉的适用于DataQL充分利用Udf和Dragment奇妙组合,提供了更便捷的数据存储逻辑配置化。但从技术架构上来审视它并不是ORM。
DataQL聚合查询引擎
DataQL介绍

DataQL(Data Query Language)是一种查询语言。旨在通过提供直观、灵活的语法来描述客户端应用程序的数据需求和交互。数据的存储根据其业务形式同城是比较简单的,并不适合直接在页面上进行展示。因此开发页面的前端工程师需要为此做大量的工作,这就是DataQL极力解决的问题。

特性

  • 层次结构:多数产品都涉及数据的层次结构,为了保证结构的一致性DataQL结果也是分层的。
  • 数据为中心:前端工程是一个比较典型的场景,但是 DataQL 不局限于此(后端友好性)。
  • 弱类型定义:语言中不会要求声明任何形式的类型结构。
  • 简单逻辑:具备简单逻辑处理能力:表达式计算、对象取值、条件分支、lambda和函数。
  • 编译运行:查询的执行是基于编译结果的。
  • 混合语言:允许查询中混合任意的其它语言代码,典型的场景是查询中混合 SQL 查询语句。
  • 类 JS 语法:类JS语法设计,学习成本极低。

举例

下面这个 DataQL 从 user 函数中查询 id 为 4 的用户相关信息并返回给应用。

return userByID({'id': 4}) => {
    'name',
    'sex' : (sex == 'F') ? '男' : '女' ,
    'age' : age + '岁'
}

返回结果:

{
  'name' : '马三',
  'sex'  : '男',
  'age'  : '25岁'
}

UDF 开发:userByID

public class UserByIdUdf implements Udf {
    public UserInfo call(Hints readOnly, Object[] params) {
        ...
    }
}
 
public class ConsoleDemo {
    public static void main(String[] args) {
        AppContext appContext = Hasor.create().build((QueryModule) apiBinder -> {
            apiBinder.addShareVarInstance("userByID", new UserByIdUdf());
 
        });
        DataQL dataQL = appContext.getInstance(DataQL.class);
        QueryResult queryResult = dataQL.createQuery(
            "return userByID({'id': 4}) => {" +
            "    'name'," +
            "    'sex' : (sex == 'F') ? '男' : '女' ," +
            "    'age' : age + '岁'" +
            "}"
        ).execute();
        DataModel dataModel = queryResult.getData();
    }
}

参考链接:DataQL 聚合查询引擎 - DataQL 聚合查询引擎 - ClouGence@Hasor

SpringBoot整合Dataway

引入依赖

Dataway是Hasor生态中的一员,使用Dataway第一步需要通过hasor-spring打通连个生态。

<!-- 引入依赖 -->
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-spring</artifactId>
    <version>4.2.2</version>
    <!-- 查看最新版本:https://mvnrepository.com/artifact/net.hasor/hasor-spring -->
</dependency>
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-dataway</artifactId>
    <version>4.2.2</version>
    <!-- 查看最新版本:https://mvnrepository.com/artifact/net.hasor/hasor-dataway -->
</dependency>
启用Hasor
@EnableHasor() // 在Spring中启用Hasor
@EnableHasorWeb() // 将 hasor-web配置到Spring环境中,Dataway的UI通过hasor-web提供服务。
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

只需要在Spring启动类上增加上面连个注解即可。

启用Dataway

在应用配置文件汇总启用Dataway

application.properties中配置:

# 启用 Dataway 功能(默认不启用)
HASOR_DATAQL_DATAWAY=true
# 开启 ui 管理功能(注意生产环境必须要设置为 false,否则会造成严重的生产安全事故)
HASOR_DATAQL_DATAWAY_ADMIN=true
 
# (可选)API工作路径
HASOR_DATAQL_DATAWAY_API_URL=/api/
# (可选)ui 的工作路径,只有开启 ui 管理功能后才有效
HASOR_DATAQL_DATAWAY_UI_URL=/interface-ui/

application.yml中配置:

# 启用 Dataway 功能(默认不启用)
HASOR_DATAQL_DATAWAY: true
# 开启 ui 管理功能(注意生产环境必须要设置为 false,否则会造成严重的生产安全事故)
HASOR_DATAQL_DATAWAY_ADMIN: true
 
# (可选)API工作路径
HASOR_DATAQL_DATAWAY_API_URL: /api/
# (可选)ui 的工作路径,只有开启 ui 管理功能后才有效
HASOR_DATAQL_DATAWAY_UI_URL: /interface-ui/
初始化必要的表(MySQL)
CREATE TABLE interface_info (
  api_id          varchar(64)  NOT NULL COMMENT 'ID',
  api_method      varchar(12)  NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
  api_path        varchar(512) NOT NULL COMMENT '拦截路径',
  api_status      varchar(4)   NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',
  api_comment     varchar(255) NOT NULL COMMENT '注释',
  api_type        varchar(24)  NOT NULL COMMENT '脚本类型:SQL、DataQL',
  api_script      mediumtext   NOT NULL COMMENT '查询脚本:xxxxxxx',
  api_schema      mediumtext   NOT NULL COMMENT '接口的请求/响应数据结构',
  api_sample      mediumtext   NOT NULL COMMENT '请求/响应/请求头样本数据',
  api_option      mediumtext   NOT NULL COMMENT '扩展配置信息',
  api_create_time varchar(32)  NOT NULL COMMENT '创建时间',
  api_gmt_time    varchar(32)  NOT NULL COMMENT '修改时间',
  PRIMARY KEY (api_id),
  UNIQUE KEY uk_interface_info (api_path)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的API';
 
CREATE TABLE interface_release (
  pub_id           varchar(64)  NOT NULL COMMENT 'Publish ID',
  pub_api_id       varchar(64)  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       varchar(4)   NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',
  pub_comment      varchar(255) NOT NULL COMMENT '注释',
  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   NOT NULL COMMENT '接口的请求/响应数据结构',
  pub_sample       mediumtext   NOT NULL COMMENT '请求/响应/请求头样本数据',
  pub_option       mediumtext   NOT NULL COMMENT '扩展配置信息',
  pub_release_time varchar(32)  NOT NULL COMMENT '发布时间(下线不更新)',
  PRIMARY KEY (pub_id),
  KEY idx_interface_release_api  (pub_api_id),
  KEY idx_interface_release_path (pub_path)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 发布历史。'

其他数据库建表语句查看官方说明:a. Spring Boot整合 - Dataway接口配置服务 - ClouGence@Hasor

初始化数据源
@DimModule
@Component
public class ExampleModule implements SpringModule {
    @Autowired
    private DataSource dataSource = null;
 
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        // .DataSource form Spring boot into Hasor
        apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
        // .custom DataQL
        //apiBinder.tryCast(QueryApiBinder.class).loadUdfSource(apiBinder.findClass(DimUdfSource.class));
        //apiBinder.tryCast(QueryApiBinder.class).bindFragment("sql", SqlFragment.class);
    }
}

Hasor启动的时候会调用loadModule方法,在这里再把DataSource设置到Hasor中。

启动工程

在启动日志中看到下列信息输出表示Dataway已经可以正常访问了。

2020-04-01 09:13:18.502 [main] INFO  n.h.core.context.TemplateAppContext - loadModule class net.hasor.dataway.config.DatawayModule
2020-04-01 09:13:18.502 [main] INFO  n.hasor.dataway.config.DatawayModule - dataway api workAt /api/
2020-04-01 09:13:18.502 [main] INFO  n.h.c.e.AbstractEnvironment - var -> HASOR_DATAQL_DATAWAY_API_URL = /api/.
2020-04-01 09:13:18.515 [main] INFO  n.hasor.dataway.config.DatawayModule - dataway admin workAt /interface-ui/
  • dataway api workAt /api/ 表示 API 的工作路径。
  • dataway admin workAt /interface-ui/ 表示 管理配置界面的地址。

此时访问:http://:/interface-ui/ 就可以看到配置页面了。

在这里插入图片描述
在这里插入图片描述

配置接口

Dataway提供两种语言模式,可以使用DataQL也可以直接使用SQL(Dataway内部SQL会被转为DataQL的形式执行)

具体操作页面说明可看如下链接:

列表页:b. 列表页 - Dataway接口配置服务 - ClouGence@Hasor

新建/编辑页:c. 新建/编辑页 - Dataway接口配置服务 - ClouGence@Hasor

API管理指南:d. API 管理指南 - Dataway接口配置服务 - ClouGence@Hasor

外部链接:
Hasor 项目的首页:https://www.hasor.net/web/index.html

要登录Dataway,您可以按照以下步骤进行操作: 1. 在ruoyi-admin模块下的application.yml或者application.properties配置文件中,启用Dataway功能。您可以在配置文件中添加以下内容: ``` # 启用Dataway功能(默认不启用) HASOR_DATAQL_DATAWAY: true ``` 2. 在启动类中开启Hasor。您可以在启动类上添加`@EnableHasor`注解。 3. 访问Dataway登录页面。默认情况下,Dataway的登录页面地址为`/api/interface-ui/`。您可以在配置文件中配置ui的工作路径,确保该路径有效。例如: ``` # ui的工作路径,只有开启ui管理功能后才有效 HASOR_DATAQL_DATAWAY_UI_URL: /api/interface-ui/ ``` 4. 使用初始登录账号登录。您可以在Hasor Dataway的配置文件中找到初始登录账号信息。 请注意,为了确保生产环境的安全,您应该将`HASOR_DATAQL_DATAWAY_ADMIN`设置为`false`,以避免潜在的安全问题。 #### 引用[.reference_title] - *1* *2* [springboot整合hasor-dataway](https://blog.youkuaiyun.com/weixin_42402326/article/details/127449765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot集成Hasor dataway,实现轻便数据查询接口](https://blog.youkuaiyun.com/weixin_44752033/article/details/115588348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值