Dataway 配置資料介面時和前端進行引數對接

語言: CN / TW / HK

【推薦閱讀】微服務還能火多久?>>>

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

分享到: