數據服務的服務編排為您提供拖拽式、可視化的工作流編排能力。您可以按照業務邏輯,以串行、并行和分支等結構編排多個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網關控制臺綁定獨立域名,并上傳SSL證書。詳情請參見支持HTTPS。
請求方式
支持GET和POST。
返回類型
僅支持JSON返回類型。
可見范圍
包括工作空間和私有:
工作空間:該API對本工作空間內的所有成員可見。
私有:該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測試對話框中,單擊確定。
在頁面下方查看運行日志和運行結果。