資料服務的服務編排為您提供拖拽式、可視化的工作流程編排能力。您可以按照商務邏輯,以串列、並行和分支等結構編排多個API及函數服務為工作流程。
前提條件
您需要購買DataWorks企業版及以上版本,才可以使用服務編排功能。詳情請參見DataWorks版本服務計費說明。
僅華東2(上海)地區支援使用服務編排功能,當前服務編排功能改造中,暫停使用,請您耐心等待功能更新改造。
背景資訊
當您調用服務編排API服務時,系統將根據設定依次執行各個服務節點、傳遞服務節點參數並自動管理每個服務節點的狀態轉換。服務編排功能極大簡化了多個服務之間組合調用的開發和營運成本,讓您可以專註於業務本身。
服務編排的優勢如下:
降低API服務開發成本
通過拖拽式、可視化的方式進行服務編排,無需額外編寫代碼即可完成多個API服務的串列、並行和分支調用,大大降低了API服務的開發成本。
提升服務調用效能
多個API或函數服務的調用在同一個容器執行個體內完成,相比您自行編寫和搭建工作流程服務可有效降低服務調用的網路開銷,顯著提升服務調用效能。
使用Serverless架構
服務編排採用Serverless架構。Serverless架構能夠實現動態伸縮,您無需關注底層運行環境,只需要關注商務邏輯本身。
輸入與輸出規則
資料服務參數取值規則基於JSONPath。JSONPath是一種資訊抽取類庫,用於JSON檔案中抽取指定資訊。詳情請參見JSONPath。
例如,對於A>B>C這3個順序節點,節點C需要取節點A、B的輸出值:
A節點輸出:{"namea":"valuea"}。
取A節點輸出:${A.namea}。
B節點輸出:{"nameb":"valueb"}。
取B節點輸出:$.nameb或${B.nameb}。
系統內建開始節點作為整個服務編排的入參。例如服務編排的入參為{"namewf":"valuewf"},則任意一個節點可通過${START.namewf}擷取對應入參值。
開始節點和結束節點是服務編排的系統內建節點,您可以重新命名,但無法刪除。開始節點相當於當前工作流程的第0個節點。
參數說明
服務編排的請求參數
單擊服務編排編輯頁面右側的請求參數,您可以通過手動添加或自動解析的方式配置請求參數:
手動添加:單擊新增參數,手動新增服務編排的請求參數。
自動解析:如果工作流程的第1個節點是API節點,單擊自動解析請求參數,您可以將該API的請求參數自動對應為服務編排的請求參數。
API節點的請求參數
單擊API節點,在面板中單擊輸入請求參數,配置請求參數值。
如果不設定參數值,系統會預設進行同名映射,即匹配上個節點輸出結果JSON的第一層的同名欄位值。
說明如果當前節點是工作流程的第一個節點,則請求參數值將與服務編排的請求參數值進行同名映射。
如果設定了參數值,系統會使用您設定的值。
說明如果期望設定當前節點的參數值為上遊指定節點的指定參數值,則需要使用JSONPath運算式。
API節點的返回參數
單擊API節點,在面板中勾選設定輸出結果,並使用JSON格式自訂輸出結果的運算式。樣本如下。
{ "return1":"$.data.rows.user_id", "return2":"$.data.rows.user_name" }
Python節點的請求參數
單擊Python節點,在請求參數編輯欄中,輸入請求參數的內容。
Python節點的返回參數
單擊Python節點,在面板中勾選設定輸出結果,並使用JSON格式自訂輸出結果的運算式。樣本如下。
{ "return1":"$.data.rows.user_id", "return2":"$.data.rows.user_name" }
常用擷取參數的JSONPath運算式。
JSONPath運算式 | 在請求參數中使用 | 在返回結果中使用 |
$. | 擷取上個節點輸出結果的根對象。 | 擷取當前節點輸出結果的根對象。 |
$.param | 擷取上個節點輸出結果中的param參數值。 | 擷取當前節點輸出結果中的param參數值。 |
${START} | 擷取服務編排的請求參數,即開始節點的輸出。 | |
${NodeID} | 擷取ID為NodeID的節點的輸出結果。 | |
${NodeID.param} | 擷取NodeID節點輸出結果中的param參數值。 |
服務編排樣本
進入資料服務頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料服務,在下拉框中選擇對應工作空間後單擊進入資料服務。
註冊API。
本文通過註冊API的方式產生一個新的API:
在左側導覽列單擊表徵圖,進入服務開發頁面。
滑鼠移至上方至表徵圖,單擊
。在註冊API對話方塊中,配置各項參數。詳情請參見註冊API。
單擊確定。
註冊函數。
在服務開發頁面,滑鼠移至上方至表徵圖,單擊 。
您也可以找到相應的商務程序,按右鍵函數,選擇
。在建立Python函數對話方塊中,配置各項參數。詳情請參見管理函數。
單擊確認。
進入函數的編輯頁面,在編輯代碼地區,輸入以下代碼。
# -*- coding: utf-8 -*- # event (str) : in filter it is the API result, in other cases, it is your param # context : some environment information, temporarily useless # import module limit: json,time,random,pickle,re,math import json def handler(event,context): # load str to json object obj = json.loads(event) # add your code here # end add return obj
在環境配置地區,設定記憶體和逾時時間。
單擊工具列中的表徵圖。
建立服務編排。
在服務開發頁面,滑鼠移至上方至表徵圖,單擊建立服務編排。
您也可以找到相應的商務程序,按右鍵服務編排,選擇建立服務編排。
在服務編排對話方塊中,配置各項參數。
參數
描述
API名稱
支援中文、英文、數字、底線(_),且只能以英文或中文開頭,4~50個字元。
API Path
API存放的路徑,例如/user。
說明支援英文、數字、底線(_)和連字號(-),且只能以( /) 開頭,不得超過200個字元。
協議
支援HTTP和HTTPS。
如果您需要通過HTTPS協議調用API,請您發布API至網關後,在API Gateway控制台綁定獨立網域名稱,並上傳SSL認證。詳情請參見支援HTTPS。
請求方式
支援GET和POST。
傳回型別
僅支援JSON傳回型別。
可見範圍
包括工作空間和私人:
工作空間:該API對本工作空間內的所有成員可見。
私人:該API僅對API的負責人可見,且暫不支援授權。
說明如果設定可見範圍為私人,在分類樹中,僅自己可見,工作空間內的其他成員不可見。
標籤
從標籤列表中選擇相應的標籤。
說明標籤名稱支援漢字、英文、數字和底線(_),您最多可以設定5個標籤,且每個標籤不超過20個字元。
描述
對API進行簡要描述,不得超過2000個字元。
目標檔案夾
存放服務編排的目錄。
單擊確認。
編輯服務編排。
在服務編排的編輯頁面,您可以根據如圖所示的順序拖拽對應模組並連線。
單擊API1編輯節點,從選擇API列表中選擇註冊的API名稱,選中設定輸出結果,並輸入
{"user_id":"$.data[0].id"}
。輸出結果設定規則:使用JSONPath來進行處理,其中擷取節點${NodeA.namea} 文法同入參規則一致。
{"user_id":"$.data[0].id"}
表示把當前節點的處理結果中的data數組的第一個值的id賦值給user_id。然後,輸出{"user_id":"value"} 形式的JSON資料。單擊PYTHON1節點後,從選擇函數列表中選擇註冊的函數名稱。
單擊SWITCH1節點後,在編輯對話方塊中,單擊設定分支條件。
條件運算式考察上一個節點的輸出,例如,
${節點ID.輸出值名}>1
或$.輸出值名>1
。條件運算式支援的操作符包括==、!=、>=、>、<=、<、&&、!、()、+、-、*、/和%。本例中,user_id是上遊輸出結果,作為下遊的請求參數。
新分支1:$.user_id != 1 分支1中,上遊的輸出結果不等於1。 新分支2:$.user_id == 1 分支2中,上遊的輸出結果等於1。
單擊結束節點後,單擊頁面右側的返回參數,配置返回參數。
測試服務編排。
單擊頁面右上方的測試。
在API測試對話方塊中,單擊確定。
在頁面下方查看作業記錄和運行結果。