企業級微服務API閘道器Fizz-服務編排內建函式
概述
在前面的教程裡已經介紹過服務編排的功能,服務編排主要是基於現有的業務微服務使用線上配置的方式快速的生成一個聚合介面。在進行入參或結果處理時,常要進行資料轉換或計算。此時可用常用的內建函式來處理,如果函式處理不了可用通過編寫指令碼來實現。Fizz版本要求:v2.3或以上版本。函式以fn.開頭,如fn.date.timestamp(), date為類別, 閘道器內建了以下幾大類函式
- 公共類 fn.common
- 日期類 fn.date
- 字串類 fn.string
- 編解碼類 fn.codec
- 數學類 fn.math
- 資料列表類 fn.list
樣例:
支援的所有函式列表可參考官方文件:函式使用文件
引用值
在函式裡支援使用引用值,如:
fn.string.concat({step1.result.channelCode},{step1.result.nonce})
{step1.result.channelCode} 表示引用值, 引用step1結果裡的channelCode欄位的值
fn.string.concat({step1.result.channelCode},{g.account.name})
{g.account.name} 表示引用值, 引用公共資源“account.name”, 以g開頭表示引用公共資源,公共資源可以定義鍵(Key)值(Value)對資料,在服務編排介面中通過引用鍵(Key)來獲取值(Value),從而避免將值硬編碼在介面中。選單位置:告警管理 > 公共資源。點選選單後進入公共資源列表頁面,如圖所示。
巢狀呼叫
支援多重巢狀呼叫,如:
fn.codec.md5(
fn.date.add(
fn.date.add(
"2021-07-09 22:44:55",
"yyyy-MM-dd HH:mm:ss",
1,
fn.math.addExact(999,1)
),
"yyyy-MM-dd HH:mm:ss",
fn.math.addExact(0,1),
1000
)
)
fn.string.toUpperCase( fn.codec.sha256( fn.string.concat( {step1.result.channelCode}, {step1.result.nonce}, {step1.result.timestamp}, {step1.result.appSecret} ) ) )
資料準備
Fizz閘道器安裝
可參考:https://www.fizzgate.com/fizz/guide/installation
函式樣例演示
在選單:服務編排->介面列表下新增一個演示用的服務編排介面/test/func,介面掛在service1服務下(沒有服務可以新增一個),定義三個入參, 分別是num1,num2兩個數字用於演示數字比較,age年齡用於演示根據年齡做判斷,因為該例子不涉及到外部介面呼叫"配置步驟“可留空。如圖:
配置輸出裡新增以下輸出欄位:
- currentTime:獲取當前時間
- threeHoursLater:當前時間加上3小時
- birthdayFromIDCard:從身份證裡提取生日並格式化展示
- cardTypeByAge:判斷年齡大於等於60返回老年卡,否則返回普通卡
- signature:使用SHA256加密方式生成簽名
- maxNum:返回兩個數中的最大值
點選右上角的測試按鈕進入到測試頁面,填寫Query引數,點擊發送可得到結果:
基於函式的巢狀呼叫可以實現比較複雜的運算,可以滿足日常大部分運算的需求,更多用法參考官方文件:服務編排-函式
Fizz閘道器介紹
Fizz Gateway 是一個基於 Java開發的微服務聚合閘道器,能夠實現熱服務編排聚合、自動授權選擇、線上服務指令碼編碼、線上測試、高效能路由、API稽核管理、回撥管理等目的,擁有強大的自定義外掛系統可以自行擴充套件,並且提供友好的圖形化配置介面,能夠快速幫助企業進行API服務治理、減少中間層膠水程式碼以及降低編碼投入、提高 API 服務的穩定性和安全性。
GitHub:https://github.com/wehotel/fizz-gateway-community
碼雲:https://gitee.com/fizzgate/fizz-gateway
入門教程:https://www.fizzgate.com/fizz/guide/GettingStarted/
進階教程:https://www.fizzgate.com/fizz/guide/advanced/
作者:黑鷹