Dataway详情
Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。 整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开拓新的管理端口。
这种内嵌集成方式模式的优点是,可以使得大部分老项目都可以在无侵入的情况下直接应用 Dataway。进而改进老项目的迭代效率,大大减少企业项目研发成本。
Dataway 工具化的提供 DataQL 配置能力。这种研发模式的变革使得,相当多的需求开发场景只要要配置就可完成交付。 从而避免了从数据存取到前台接口之间的一系列开发任务,例如:Mapper、BO、VO、DO、DAO、Service、Controller 统统不在需要。
在《Dataway让Spring Boot不在需要Controller、Service、DAO、Mapper》文章中,我们详情了如何使用。Dataway 来配置接口避免开发工作。这篇文章来详情一下刚刚发布的新版本 Dataway。4.1.6 正式发布的时间是2020年 05月 10日,整体 Dataway 迭代速度还是非常快的。
假如你是老版本的 Dataway 工程,例如 4.1.3、4.1.4。那么需要先阅读一下这篇文章做一下版本更新:《Dataway 4.1.5 以上版本更新指南》
老项目
在 4.1.5 之前,所有 Dataway 的接口调用都会有一个 API 标准返回结构,例如:
少量老的项目或者者目前正在迭代的项目,有自己的返回值格式定义。这样一来 Dataway 在项目的融入上就比较麻烦。为此有少量 issue 在咨询如何处理这个问题。例如:
《如何把返回结果的默认结构去掉- zycgit/hasor/issues/40》
默认结构详情
在 4.1.6 之后可以通过下面两种方式来完全自己设置返回结构。
默认情况下,模版的内容如上所示。
{"success":"@resultStatus",// 执行状态:失败还是成功"message":"@resultMessage",// 消息"code":"@resultCode",// 执行推出码"lifeCycleTime":"@timeLifeCycle",// 整个执行消耗时间,单位毫秒"executionTime":"@timeExecution",// 真正执行 DataQL 的消耗时间,单位毫秒"value":"@resultData"// 执行结果。}
其中 lifeCycleTime - executionTime ,可以粗略算出。参数解析和 DataQL 查询编译的消耗时间。
自己设置结构:模版方式
假如我们要改变默认返回的结构,比方下面这种:
{"success":true,"message":"操作成功!","code":200,"result": ....}
这时候即可以配置 Structure 为如下内容:
{"success":"@resultStatus",// 执行状态:失败还是成功"message":"@resultMessage",// 消息"code":"@resultCode",// 执行推出码"value":"@resultData"// 执行结果。}
在执行一下就会发现出现我们需要的结果了。
自己设置结构:代码方式
有时候模版中想要输出的内容中模版的内置 变量并没有提供,例如:我想输出当前时间戳。
那么这个时候即可以采用代码形式,通过代码我们自己设置返回结构。
首先,我们在Dataway 上把 API 的 Structure 关掉。这时所有执行的返回结果都没有外层结构了。
而后通过 ResultProcessChainSpi 自行封装我们需要的结构。
apiBinder.bindSpiListener(ResultProcessChainSpi.class,newResultProcessChainSpi(){publicObjectcallAfter(booleanformPre, ApiInfo apiInfo, Object result){if(formPre) {returnresult;//假如前置阻拦器解决了。那么后置阻拦器就不解决。}returnnewHashMap() {{ put("method", apiInfo.getMethod()); put("path", apiInfo.getApiPath()); put("result", result); }}; }publicObjectcallError(booleanformPre, ApiInfo apiInfo, Throwable e){returnnewHashMap() {{ put("method", apiInfo.getMethod()); put("path", apiInfo.getApiPath()); put("errorMessage", e.getMessage()); }}; }});
再次执行即可以看到我们需要的结果了。
小技巧:如何批量关掉 Structure
首先 Dataway 页面上并未提供批量设置 Structure 的能力。不过页面不提供不代表,其它地方不能做到。这里提供一个办法:
apiBinder.bindSpiListener(ResultProcessChainSpi.class,newResultProcessChainSpi() {publicObjectcallAfter(booleanformPre, ApiInfo apiInfo,Objectresult) {if(....) { Map optionMap = apiInfo.getOptionMap(); optionMap.put("resultStructure",false);// 手工设置关闭apiInfo.setOptionMap(optionMap);returnResult.ok(result); }//.... }});
提供这个办法的 Issue 在这里: zycgit/hasor/issues/40
最后放几个有用的连接:
- 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
【毕设】jsp169SSM员工人事工资管理系统毕业设计
1079 C# 十进制,十六进制,二进制转换 示例源码
VPAY区块链系统+商城蓝色版
C# asp.net田径运动管理系统(基于B/S架构) 【送作品ppt介绍、作品word文档、源码、
winform c# C/S 超市进销存系统管理资料 文档 源码 源代码 程序
网页游戏平台搭建一条龙 完美二次开发无BUG 游戏接入 技术支撑
C# 剪刀石头布小游戏
完整开源全套,第三方api,第四方支付平台程序源码|完美经营版
星系星空动画
黑色风格 美容美发化妆职业学校建站系统网站源码nxx09 ASP+ACC