資料服務支援通過嚮導模式或指令碼模式,基於已有資料來源產生資料API。本文以API Gateway為例,指導您完成從開通網關、建立商務程序到產生並配置API的完整流程。
若使用雲原生API Gateway,操作步驟請參見建立、發布和調用API(雲原生API Gateway)。
前提條件
進入資料服務頁面
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入資料服務。
步驟一:開通API Gateway並建立API分組
在建立商務程序之前,您需要先在API Gateway控制台完成以下準備工作。
-
登入API Gateway控制台,開通API Gateway服務。
-
在API Gateway控制台中,建立一個API分組。API分組是指標對某一個功能或情境的API集合,也是API Gateway對API的最小嵌入式管理單元。
重要API Gateway的地區必須與DataWorks工作空間地區一致。
步驟二:建立商務程序
資料服務基於商務程序實現以業務為單元的API開發,每個商務程序需綁定一個API分組。在產生API前,您需要先建立商務程序。
-
在服務開發頁面,單擊
表徵圖,選擇新建業務流程。 -
在新建業務流程對話方塊中,配置各項參數。
參數
描述
業務名稱
在所屬工作空間中必須唯一。支援漢字、英文字母、數字、底線(_),以英文字母或漢字開頭,4~50個字元。
API 群組
選擇您在步驟一中建立的API分組。如果需要建立分組,請進入API Gateway建立。
重要商務程序綁定API分組後,不支援修改。請謹慎選擇。
業務描述
對商務程序進行描述,不能超過180個字元。
-
單擊確定。建立完成後,您可以在業務流程列表中查看。
步驟三:選擇API建立模式
資料服務支援通過嚮導模式和指令碼模式兩種方式產生API。兩種模式共用相同的API基礎配置流程,但在查詢邏輯的構建方式上有本質區別。
模式對比
|
功能分類 |
功能點 |
嚮導模式 |
指令碼模式 |
|
查詢對象 |
單資料來源、單資料表查詢 |
支援 |
支援 |
|
單資料來源、多資料表關聯查詢 |
不支援 |
支援 |
|
|
查詢條件 |
等值查詢、範圍查詢、模糊比對 |
支援(通過操作符選擇) |
支援(SQL文法自由定義) |
|
MyBatis動態條件(選填參數等) |
不支援 |
支援(進階SQL模式) |
|
|
查詢結果 |
欄位值原樣返回、返回結果分頁 |
支援 |
支援 |
|
數學運算、彙總函式運算 |
不支援 |
支援 |
如何選擇
-
使用嚮導模式:當您只需對單張資料表進行簡單的等值查詢、模糊查詢或範圍過濾,無需編碼即可可視化配置API。
-
使用指令碼模式:當您需要多表JOIN、嵌套子查詢、彙總統計、動態條件拼接(如選填參數)等進階查詢能力時。
嚮導模式建立的API可以轉換為指令碼模式,但轉換後無法回退。詳見本文附錄:嚮導模式轉指令碼模式。
步驟四:產生API
-
在服務開發頁面,滑鼠移至上方至
表徵圖,單擊。您也可以開啟相應的商務程序,按右鍵API,選擇。
-
在生成API對話方塊中,配置各項參數。
參數
描述
API 模式
選擇嚮導模式或腳本模式。選擇指令碼模式時,還需進一步選擇SQL 模式(基礎SQL或高級SQL)。
-
基礎SQL:通過基礎SQL文法編寫查詢邏輯。
-
高級SQL:通過支援MyBatis標籤的SQL文法編寫查詢邏輯。支援的標籤類型包括:if、choose、when、otherwise、trim、foreach和where。
API名稱
支援中文、英文、數字、底線(_),且只能以英文或中文開頭,4~50個字元。
APIPath
API存放的路徑,即相對於服務host的請求路徑,例如/user。支援英文、數字、底線(_)和連字號(-),以(/)開頭,不超過200個字元。
協議
支援HTTP和HTTPS。
如果您需要通過HTTPS協議調用API,請您發布API至網關後,在API Gateway控制台綁定獨立網域名稱,並上傳SSL認證。詳情請參見支援HTTPS。
請求方式
支援GET和POST。
說明選擇GET時,請求參數位置僅支援QUERY。選擇POST時,支援QUERY和Body。
返回類型
僅支援JSON傳回型別。
可見範圍
-
工作空間:該API對本工作空間內的所有成員可見。
-
私有:該API僅對API的負責人可見,且暫不支援授權。
標籤
從標籤列表中選擇,最多5個標籤,每個不超過20個字元。詳情請參見建立及管理API標籤。
描述
對API進行簡要描述,不超過2000個字元。
目標文件夾
選擇已建立的商務程序作為API存放目錄。預設格式為:"商務程序/商務程序名稱/API"。
-
-
單擊確定,進入API編輯頁面。
步驟五:配置API
1. 選擇資料來源和表
雙擊開啟API的編輯頁面,在選擇表地區,配置數據源類型、數據源名稱和數據源環境等參數。不同資料來源類型的配置參數略有不同,具體以介面為準。
2. 定義查詢邏輯
嚮導模式和指令碼模式在定義查詢邏輯時的操作方式不同。
嚮導模式:選擇參數
選擇資料表後,選擇參數地區會自動顯示該表的所有欄位。根據需求勾選欄位的設為請求參數和設為返回參數列。
如果需要對返回結果排序,單擊欄位後的排序按鈕,將其添加至排序列表。排序列表中可添加多個欄位,序號越小優先順序越高,通過上移和下移調整優先順序,每個欄位可選擇昇冪或降冪。
指令碼模式:編寫查詢SQL
在編寫査詢SQL地區,輸入查詢SQL語句。
基礎SQL模式:使用${paramName}標記請求參數。SELECT後的欄位為返回參數,WHERE條件中的${param}為請求參數。
編寫SQL時需遵循以下規則:
-
支援同一資料來源下的單表查詢、多表關聯查詢和巢狀查詢。
-
不支援多條SQL語句、注釋和INSERT/UPDATE/DELETE等非SELECT文法。
-
不支援
SELECT *,必須明確指定查詢列。 -
列名帶表名首碼(如t.name)時,必須取別名(如t.name as name)。使用彙總函式時也必須取別名。
-
不支援將${param}放在引號中。如需拼接字串請使用
concat('abc', ${xyz}, '123')。 -
基礎SQL不支援設定參數為可選。
進階SQL模式:支援MyBatis標籤文法(if、choose、when、otherwise、trim、foreach、where),可靈活實現空值校正、多值遍曆、動態查表、動態排序等複雜查詢邏輯。常見情境程式碼範例請參見本文附錄:進階SQL(MyBatis文法)樣本。
進階SQL中使用特殊字元時需進行轉義處理:
|
特殊字元 |
逸出字元 |
含義 |
|
> |
> |
大於 |
|
>= |
>= |
大於等於 |
|
< |
< |
小於 |
|
<= |
<= |
小於等於 |
|
& |
& |
和 |
|
' |
' |
單引號 |
|
" |
" |
雙引號 |
3. 配置請求參數
單擊API編輯頁面右側的請求參數,配置各項參數。
-
進行結果預覽前請設定API參數的樣本值、預設值、描述等資訊。
-
盡量將有索引的欄位設定為請求參數。
-
進階SQL模式下,系統無法自動解析參數,請根據SQL指令碼手動新增所有請求參數至列表中。
-
嚮導模式不支援對同一欄位配置兩個參數形成取值區間,如需此功能請使用指令碼模式。
|
參數 |
描述 |
|
參數名稱 |
支援英文、數字、底線、連字號(-),以英文開頭,不超過64個字元。 |
|
綁定欄位 |
僅嚮導模式可見。預設不可修改,與所選資料表欄位綁定。如需修改綁定關係,請使用指令碼模式。 |
|
參數類型 |
支援STRING、INT、LONG、FLOAT、DOUBLE、BOOLEAN。 |
|
參數位置 |
QUERY或BODY。選擇BODY時需設定Content-Type(支援JSON、XML、FORM三種格式)。 |
|
操作符 |
僅嚮導模式可見。定義請求參數與賦值之間的比較關係,支援:=、LIKE、IN、NOT IN、NOT LIKE、!=、>、<、>=、<=。 說明
當資料來源類型為Table Store時,操作符僅支援=。 |
|
是否必填 |
控制調用時該參數是否必填。 |
|
示例值 |
該請求參數的樣本值。 |
|
默認值 |
該請求參數的預設值。 |
|
描述 |
該請求參數的簡要說明。 |
4. 配置返回參數與分頁
單擊API編輯頁面右側的返回參數,配置參數名稱、參數類型、樣本值和描述。進階SQL模式下請根據SQL指令碼手動新增所有返回參數。
在高級配置地區,設定是否開啟返回結果分頁:
-
不開啟:API預設最多返回2000條記錄。
-
開啟:可在服務資源組頁面根據資源群組類型設定單頁條數上限。
開啟分頁後,系統自動增加以下公用參數:
-
公用請求參數:returnTotalNum(是否返回資料總條數)、pageNum(當前頁號)、pageSize(每頁記錄數)。
-
公用返回參數:pageNum、pageSize、totalNum(總記錄數)。
-
若API無請求參數,則必須開啟返回結果分頁。
-
指令碼模式中,若在SQL中使用了
limit限制,開啟分頁後limit不生效,以分頁配置為準。
5. 配置過濾器(可選)
當您需要對API的請求參數進行預先處理或對查詢結果進行二次加工時,在右側導覽列單擊過濾器,根據需要勾選使用前置過濾器或使用後置過濾器,選擇函數類型後選擇目標函數。可添加多個函數,執行時按添加順序處理。建立和使用過濾器詳情請參見建立Aviator函數、建立Python函數。
-
當使用Python函數作為過濾器時,請先開通DataWorks專業版及以上版本,並使用公用資料服務資源群組。
-
當使用Aviator函數作為過濾器時,無DataWorks版本限制,但需要使用獨享資料服務資源群組。
-
若在過濾器下拉式清單中無法擷取目標函數,請檢查函數是否發行。詳情請參見發布函數。
6. 佈建服務資源群組
在右側導覽列單擊服務資源組,配置API調用時使用的資源群組類型。
支援獨享服務資源組和公共服務資源組。獨享服務資源群組可選擇目標資源群組名稱;公用服務資源群組由DataWorks內部自動維護。
-
公用服務資源群組僅建議在測試情境使用,不建議在生產情境使用。
-
若在列表中未看到目標資源群組,請進入資源群組列表頁,將資源群組與工作空間進行綁定。
在環境配置地區,可設定記憶體、超時時間和單次請求數據條數上限:
-
逾時時間:API Gateway共用執行個體不超過30000ms;API Gateway專享執行個體下獨享資源群組不超過90000ms。
說明API的回應時間取決於SQL實際執行時間,請合理配置逾時時間,避免因響應逾時導致請求失敗。
-
單頁條數上限:公用服務資源群組最多2000條,獨享服務資源群組最多10000條。API返回結果總數暫無上限控制。
步驟六:儲存並提交
單擊工具列中的
表徵圖,儲存API後,所選資源群組將在測試時生效。
後續步驟
-
測試與發布:
-
管理API:您還可以在服務開發頁面左側分類樹中對目標API進行複製和刪除等操作。您也可以在服務管理頁面,展開API列表,查看發行API的詳情。詳情請參見查看、刪除、移動、複製、大量操作、程式碼搜尋API。
附錄:嚮導模式轉指令碼模式
您可以將嚮導模式產生的API轉換為指令碼模式:
-
在服務開發頁面,展開目標API所在的。
-
雙擊相應的API名稱,開啟該API的編輯頁面。
-
單擊工具列中的
表徵圖。 -
在提示對話方塊中,單擊確定。
警告-
僅支援將嚮導模式轉換為指令碼模式。
-
轉換後無法回退至嚮導模式,請謹慎操作。
-
附錄:進階SQL(MyBatis文法)樣本
以下樣本展示指令碼模式下使用進階SQL編寫複雜查詢邏輯的常見情境。使用時請將表名、欄位和查詢條件替換為您的實際內容。
樣本1:通過條件控制返回結果的排序方式
通過var的值決定使用哪種排序方式。
select col01,col02
from table_name
<choose>
<when test='var == 1'>
order by col01
</when>
<when test='var == 2'>
order by col02
</when>
<when test='var == 3'>
order by col01,col02
</when>
<when test='var == 4'>
order by col02,col01
</when>
</choose>
請求參數:var(類型INT,必填)。返回參數:col01、col02。
樣本2:通過條件控制查詢不同的資料表
通過var的不同取值控制查詢不同的表。
select col01
from
<choose>
<when test='var == 1'>
table_name01
</when>
<when test='var == 2'>
table_name02
</when>
</choose>
樣本3:通過判斷欄位值是否為空白控制where查詢條件
根據list集合是否為空白,動態產生查詢條件。若list不為null,則產生包含area欄位值的查詢條件。
SELECT area_id, area, amount
FROM table_name
<where>
<if test='list!=null'>
area in
<foreach collection="list" open="(" close=")" separator="," item="area">
#{area}
</foreach>
</if>
</where>
請求參數:list(類型STRING_LIST,必填,樣本值:北京市,杭州市)。返回參數:area_id、area、amount。
附錄:最佳實務 — 選填參數設定
在實際業務中,經常需要部分請求參數為可選——調用方可自行決定是否傳入某個參數值,未傳值時該參數不參與查詢條件。以下以ods_user_info_d表為例,將uid設為必填參數,gender設為選填參數。
|
欄位名稱 |
欄位類型 |
描述 |
|
uid |
INT |
使用者ID |
|
gender |
STRING |
性別 |
|
age_range |
STRING |
年齡段 |
|
zodiac |
STRING |
星座 |
嚮導模式實現選填參數
嚮導模式下實現選填參數非常簡單:在選擇參數地區勾選uid和gender為請求參數後,在右側請求參數面板中,將gender的是否必填取消勾選即可。
-
勾選:調用API時必須傳入具體值,否則將出現參數校正異常。
-
不勾選:調用API時允許自行選擇傳入或不傳入。未傳值時,該參數不作為查詢條件。
調用效果:
-
情況一:
uid和gender均傳值,執行查詢:SELECT uid, gender, age_range, zodiac FROM ods_user_info_d WHERE uid = 0016359810821 AND gender = '女'; -
情況二:僅
uid傳值,gender未傳值,執行查詢:SELECT uid, gender, age_range, zodiac FROM ods_user_info_d WHERE uid = 0016359810821;
指令碼模式實現選填參數
基礎SQL無法實現真正的選填邏輯。即使取消勾選是否必填,未傳值時將按參數 = null查詢(通常返回空結果),而非忽略該條件。如需選填參數,請選擇進階SQL模式。
在進階SQL模式下,通過MyBatis的<if>標籤實現條件判斷:
SELECT uid, gender, age_range, zodiac
FROM ods_user_info_d
<where>
<if test='gender!=null'>
gender = ${gender}
</if>
and uid = ${uid}
</where>
-
<where>標籤會自動處理WHERE關鍵字和多餘的AND/OR首碼。 -
<if test='gender!=null'>表示僅當gender參數傳入非空值時,才將其加入查詢條件。 -
配置完SQL後,在右側請求參數面板中手動添加
uid和gender參數,並將gender的是否必填取消勾選。
調用效果與嚮導模式一致:傳值時gender條件生效,未傳值時條件被跳過。
選填參數設定總結
|
方式 |
實現方法 |
複雜度 |
適用情境 |
|
嚮導模式 |
取消勾選"是否必填" |
簡單 |
單表簡單查詢 |
|
指令碼模式(基礎SQL) |
不支援 |
— |
— |
|
指令碼模式(進階SQL) |
使用 |
中等 |
多表關聯、複雜查詢 |