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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章