其實很久以前就很想要寫這個系列文,不過在因緣際會之下,兩年前(2023年)鐵人賽反而成為筆者系列文的處女作,撰寫了任務為導向的 Azure DevOps 系列文,也獲得了一個不錯的獎項。兩年前的題目算是讓自己當下腦力激盪,強迫自己在當下思考出組織內到底要如何去使用Azure DevOps Service來完成協作這個任務。
在過去筆者還有一個協助組織導入多年的工具,叫做Kong API Gateway,之所以會想要撰寫這個工具的介紹文章,其實也是在引入一兩年後,才發現到這個議題其實在企業中無比重要。
筆者是從開發出身的,最早也認為這僅是一個工具,將公司內各個系統的API都集中管理,可以達到安全性與監控的目的。所以企業應該是用來做好各項管控,以避免公司重要的API資訊外漏而已。
不過多年前如此思考的我,顯然還是太年輕了,實際上一個優秀的API Gateway,從DevOps 的角度來看看是可以從多個面向協助組織。如提高API資訊安全,降低開發人員負擔,協助維運人員各項監控與追蹤任務。
另外,Kong API Gateway 是開源軟體,有非常多的功能與Plugin是免費的,用來不花費成本的學習,絕對是最佳的鐵人賽參賽素材。
最早自己在寫程式的時候,通常除了需求的Feature以外,工程師都還會需要實作非常多非需求面的部分,簡單舉一些例子如下:
上面簡單列出了三點,其實實務上可能還會因為場景遇到更多可能的需求,例如限制流量、CORS、過濾或轉換、提供監控平台觀測資訊等等,都可能會發生在每一位程式設計師身上。
而如果每個API都要自己實作這些內容其實非常不易,特別是這些非功能性的需求,在驗收當下一般使用者根本不會有感覺,因此遺漏的可能性十分高。
筆者在金融業工作,我常常見到一種API的設計,那就是例如某個商業合作模式要完成,就在該系統上維護一支專屬的API。接著兩邊對開一條專線,讓這個服務可以提供給對方使用。
這種設計邏輯大概就是,將使用API的企業該節點,視為內網的一部分。因此只要這支API被呼叫出問題時,可以大概確定就是該公司做的好事。
但是,電信專線的成本其實十分高昂,加上如果一個合作對象就要維護一組API。那如果此項業務擴展,API服務的節點數就會大幅增加,設計不良的狀況下,工程師就會遇到大量的重工。因此改東忘西,改A壞B的狀況就會屢見不鮮。
而如果企業高層決定要將現有內部的API提供給外部使用者,這些外部使用者可能是合作的商業企業夥伴,或是大型企業中不同的子公司使用,就會開始衍伸出更進階的安全性議題。
原因在於,這些API 或是Web Service 在設計與撰寫的時候,在各方面並未思考過開放與管理方式。這就可能造成各種連入負擔與安全性議題,這時候該怎麼辦?
這可能會造成工程師開發成本大增,而且既有使用對象因為變更無法使用服務的風險提高,可能造成各方面的損失。
前面說到電信連線成本其實非常高昂,而且雖說這看起來不會馬上影響到現有使用者的體驗,但不可否認的會造成技術債持續疊加,直到哪天撐不住為止。
圖1-1 API Gateway
上面痛點出現後,這種API Gateway的解決方案就開始出現了。這種解決方案如同上圖,就是希望將原本各自分散的功能,集中在一個平台中一併協助完成。這種平台可以協助幾個事項:
筆者由於是在DevOps領域較為精熟,因此在撰寫的過程中雖說會藉由Kong作為學習的本體,但主要還是會圍繞在認證授權與可觀測性實踐為主。
身為讀者的你,筆者希望藉由此系列文,帶來一系列的探索與學習,包含了:
dotnet core api 簡易實作
Kong API Gateway
可觀測性工具實踐
個案講解
期望大家有一趟愉快的旅程,坐好了~ 出發~~