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 來模擬數據輸出的結果。

接下來我們編寫數據庫查詢然后返回我們在數據庫中的數據,為了演示這個功能我在數據庫中先創建了一張表並且初始化了一些數據。它們看上去是這個樣子的:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM