Dataway 配置数据接口时和前端进行参数对接
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 的页面中定义前端请求参数。
在编写SQL 之前我们先在 DataQL 上编写一段 JSON 通过这个 JSON 来模拟数据输出的结果。
接下来我们编写数据库查询然后返回我们 mock 的数据。为了演示这个功能我在数据库中先创建了一张表并且初始化了一些数据。它们看上去是这个样子的
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
接下来我编写一段 SQL 查询这个表,并且在返回 mock 的数据的前面先尝试执行SQL返回数据。
可以看到数据已经如我们预期的输出了出来,在这里 DataQL 的执行是按照顺序进行的。当遇到 return 指令的时,后续的查询将不会被执行。
接着把数据库返回的结果做一下格式转换,让其按照我们要求的格式返回数据。官方手册这一部分的内容在这里:https://www.hasor.net/web/dataql/grammar/convert.html#
我们这里需要做的是把一个 List 结果格式进行一次变换。最起码我们需要的列名都要变化一下。在执行一下就得到我们要的预期结果了。
最后一部分,在 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
这样一来我们就可以通过前端传入 '%xxxx%' 这样的形式的参数就可以完成模糊匹配查询了。
有心的同学可能想问如何能让前端避免传 % 这样的字符? 如果传了就默认加上,不传就默认查询全部。
实现这个需求其实有很多办法,这篇文章主要讲解的是前后端传参数传递,因此我们选用 数据库拼接字符串的方式来实现。
- 我们可以利用 数据库的字符串连接功能把 % 拼接的事情交给数据库 : concat('%',#{userName},'%')
- 另外还可以通过 DataQL 的方式。
然后我们在请求参数上输入模糊匹配的信息执行查询就可以得到结果了。
这一次我们采用 Post 方式来请求接口。为了模拟 Post 我们需要请出 PostMan 这个神器。
填写 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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
好程序员web前端培训分享做H5页面需要学什么
好程序员web前端培训分享做H5页面需要学什么,很多人问过我这个问题,而问这个问题的人基本上都是刚听说过h5,处在懵懂的阶段,他们往往会被一些网上炫酷页面所吸引,开始的目的也很简单,能通过自己的努力做出这些页面,而这些页面效果一般只要通过简单的html和css就能实现,但这仅仅是表面现象,做出来与做好是两码事。而要做好它,必须要深入地去了解什么是h5。网上有很多说法,说h5就是html的第5个版本,其实这不完全正确,h5已经不是单纯的一门标识语言,它是一门综合的技术,除了最基本的html、css、javascript外,还能够提供音频视频、图像动画、本地存储以及各种重要接口,为下一代互联网应用提供了全新平台。应该说有了h5,我们就能轻松实现类似桌面的应用(比如各种管理系统、手机app应用等)h5现在为什么收到很多企业的青睐,最关键的一点是跨平台,所谓的跨平台就是做出来的东西能够适应各种浏览器、各种设备、各种系统(iSO、安卓等),还能适应不同屏幕大小。对于企业来说,这样就能大大减少人力成本、时间成本等。你知道安卓开发、iOS开发现在为什么需求直线下降?为什么学安卓、iOS的人很难找到工...
- 下一篇
工程师工作3年一年水平,工作一年三年经验原因在哪?
引言 有时候我们会在工作中看到有些工程师工作了3年、5年实际水平也就一年两年,有些工程师则相反。而且这种现象还不是少数,如果你或多或少也有这种感慨,那么这篇文章值得你仔细往下看了。 场景重现 你自认为付出了跟别人同样的努力,但是你的成长确实更慢一些,比如学得比别人慢,排查问题比别人慢,解决问题也比别人慢。 你觉得你只是在疲于应付需求,自己做的事情完全没有技术含量,而且都是重复工作。 当你换到一个新的领域,你发现自己的经验好像用不上; 你一直很难搞懂老鸟说的“认知升级”到底是什么概念?不同级别的技术思维能力到底有什么差别?为什么晋升的是他,而不是我? 工程师成长的几个误区 只要把事情搞定了,成长是自然而然的事情——可能过段时间,你发现之前犯过的错误,后来一个都没有避免; 我只要努力,996 甚至 007 ,我就能够成长得比别人快——可能你发现你干得最多,但是并没有拿到最好的结果; 我尽力了,还是比别人慢,应该是我智商确实差一些; 别人表现好,或者晋升了,只不过是比我表达能力更强而已。 思考力的重要性 上面这几个成长的问题和误区,跟没有掌握思考力有着非常重要的关系,而且我发现所有发展比较顺...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路