Dataway 配置数据接口时和前端进行参数对接

Stella981
• 阅读 617

Dataway介绍

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

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

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

在《在 Spring Boot 中使用 Dataway 配置数据查询接口》文章中,我们介绍了如何使用。Dataway 来配置接口避免开发工作。这篇文章来介绍一下如何和前端对接参数。

通常前后端连调时,都要对接一下接口。在这个过程中前后端会确定 请求参数的个数和格式,以及数据响应的个数和格式。

比如根据用户名称模糊查询相关用户列表。在这个场景中设定一个请求参数,姑且叫它 userName把。然后返回一个列表,列表中是符合条件的用户信息。

为了这个场景我们首先需要定义前后端交互数据接口:

请求:

userName : String

响应:

rootData:Array[UserInfo]
UserInfo:{
      user_id        : Integer,
      user_name : String,
      user_sex     : String
}

在 Dataway 中首先我们新建一个接口,并且给接口取好名字和备注。

Dataway 配置数据接口时和前端进行参数对接

紧接着我们在 Dataway 的页面中定义前端请求参数。

Dataway 配置数据接口时和前端进行参数对接

在编写SQL 之前我们先在 DataQL 上编写一段 JSON 通过这个 JSON 来模拟数据输出的结果。

Dataway 配置数据接口时和前端进行参数对接

接下来我们编写数据库查询然后返回我们在数据库中的数据,为了演示这个功能我在数据库中先创建了一张表并且初始化了一些数据。它们看上去是这个样子的:

CREATE TABLE `user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4

Dataway 配置数据接口时和前端进行参数对接

接下来我编写一段 SQL 查询这个表,并且在返回 mock 的数据的前面先尝试执行SQL返回数据。

Dataway 配置数据接口时和前端进行参数对接

可以看到数据已经如我们预期的输出了出来,在这里 DataQL 的执行是按照顺序进行的。当遇到 return 指令的时,后续的查询将不会被执行。

接着把数据库返回的结果做一下格式转换,让其按照我们要求的格式返回数据。官方手册这一部分的内容在这里:https://www.hasor.net/web/dataql/grammar/convert.html#

我们这里需要做的是把一个 List 结果格式进行一次变换。最起码我们需要的列名都要变化一下。在执行一下就得到我们要的预期结果了。

Dataway 配置数据接口时和前端进行参数对接

最后一部分,在 SQL 查询中使用我们预先定义好的 userName 来进行 模糊匹配。首先 SQL 语句需要有所改写:

select * from user_info
   =>
select * from user_info where like `name` like #{userName} <- 类似 Mybatis 的写法,带参数的SQL 用 #{...}

SQL 中参数名已经确定好了,接下来改写一下 定义 SQL 查询这一部分声明一个参数。这就好比定义方法的参数一样。

var queryUser = @@sql(userName)<%   <-- 增加参数定义
    select * from user_info where `name` like #{userName}
%>

最后将前端传入的请求参数,在执行用户查询的时候将其传进去即可。在 DataQL 查询中要想获得 Paramerers 面板中定义的参数需要通过 ${ ... } 形式获取。这部分内容在官方手册上也有介绍在这里:https://www.hasor.net/web/dataql/grammar/params.html

Dataway 配置数据接口时和前端进行参数对接

这样一来我们就可以通过前端传入  '%xxxx%'  这样的形式的参数就可以完成模糊匹配查询了。

有心的同学可能想问如何能让前端避免传 % 这样的字符? 如果传了就默认加上,不传就默认查询全部。

实现这个需求其实有很多办法,这篇文章主要讲解的是前后端传参数传递,因此我们选用 数据库拼接字符串的方式来实现。

  • 我们可以利用 数据库的字符串连接功能把 % 拼接的事情交给数据库 : concat('%',#{userName},'%')
  • 另外还可以通过 DataQL 的方式。

然后我们在请求参数上输入模糊匹配的信息执行查询就可以得到结果了。

Dataway 配置数据接口时和前端进行参数对接

这一次我们采用 Post 方式来请求接口。为了模拟 Post 我们需要请出 PostMan 这个神器。

Dataway 配置数据接口时和前端进行参数对接

填写 POST、URL 点击执行就可以看到结果了。

最后总结

好了,在本文中我们通过一个简单的例子介绍了如何使用 Dataway 配置一个接口。并且给接口增加一个请求参数,并确定了接口的返回结构。最后我们编写 SQL 查询数据然后通过 DataQL 格式转换的能力满足响应结果的要求。在最后我们通过 Postman 来模拟请求看到接口可以正常工作。

后面会有更多 Dataway 的文章推出也欢迎大家继续关注,大家在使用过程中遇到什么问题可以在评论区留言,或者加入 Hasor 线下交流群一起讨论(群号请到 Hasor 官网上查阅)

最后放几个有用的连接:

- Dataway 官方手册:https://www.hasor.net/web/dataway/about.html
- Dataway 在 OSC 上的项目地址,欢迎收藏:https://www.oschina.net/p/dataway
- DataQL 手册地址:https://www.hasor.net/web/dataql/what_is_dataql.html
- Hasor 项目的首页:https://www.hasor.net/web/index.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Dataway 整合 Swagger2,让 API 管理更顺畅
Dataway介绍Dataway是基于DataQL服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过Dataway提供的UI界面完成。UI会以Jar包方式提供并集成到应用中并和应用共享同一个http端口,应用无需单独
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这