來源:北大青鳥總部 2023年03月13日 13:45
對于已經(jīng)奔赴在職場的大學生們、準備跳槽or看機會的朋友們,今天給大家上一堂API網(wǎng)關知識的查漏補缺課,希望能幫大家斬獲心儀的offer~
在介紹API網(wǎng)關是什么之前,我們需要知道網(wǎng)關是什么?網(wǎng)關又稱為協(xié)議轉(zhuǎn)換器,相當于網(wǎng)絡之間的“關卡”,用于連接網(wǎng)絡。我們知道在沒有路由器的情況下,不同網(wǎng)段的網(wǎng)絡是不能進行通信的,要實現(xiàn)通信就需要網(wǎng)關,就像從一個房間走向另一個房間必須要經(jīng)過一扇門一樣。網(wǎng)關就像是連接器一樣,把不同的東西連接起來了。
隨著互聯(lián)網(wǎng)的興起,出現(xiàn)了復雜多變的應用系統(tǒng),應用系統(tǒng)與應用系統(tǒng)之間需要連接起來使得自己更加強大。例如:微信開發(fā)平臺就會把自己的能力作為開發(fā)平臺對外開放,企業(yè)利用微信公眾號的微信開發(fā)平臺二次開發(fā)就可以提供更加豐富的功能,在微信公眾號就可以接收告警系統(tǒng)的信息等。應用系統(tǒng)內(nèi)部的功能模塊與功能模塊之間需要連接起來使得應用的管理更加便捷。
應用系統(tǒng)與應用系統(tǒng)之間的能力、數(shù)據(jù)對外開放的模式就是openAPI,通過API網(wǎng)關可以統(tǒng)一管理客戶應用的接入、API權限的管理、調(diào)用次數(shù)管理等。應用內(nèi)部功能模塊與功能模塊之間的能力就是微服務API網(wǎng)關,大家都知道隨著微服務架構的流行,企業(yè)將服務拆分的更加細化,像淘寶這樣的業(yè)務包含幾千個微服務,前端用戶的一個請求可能涉及到多個微服務模塊的調(diào)用,如果通過在調(diào)用的URL里寫明調(diào)用的后端API地址,程序猿們估計是要瘋了。每上線一個新服務,需要申請域名、配置Nginx,由不同的運維人員去維護,運維們估計也是要瘋了。
而API網(wǎng)關就是把所有的請求入口都匯聚成了一個地址,對于前端開發(fā)來說,只需要向一個URL發(fā)起請求,后續(xù)的請求處理全交由這個URL去管理分配。
API網(wǎng)關會接管所有的入口流量,將所有的請求轉(zhuǎn)發(fā)給后端服務器。一個API網(wǎng)關最基本的功能有四個,即統(tǒng)一接入、協(xié)議適配、流量監(jiān)控與容錯、安全防護。
網(wǎng)關就是系統(tǒng)的唯一入口,進入系統(tǒng)的所有請求都要經(jīng)過API網(wǎng)關,就像去上學要走到對應的教室、操場、圖書館、廁所都必須得通過校門才可以進去。這就叫做統(tǒng)一接入。
協(xié)議適配還是比較好理解的。在一個龐大的應用系統(tǒng)內(nèi)部,子系統(tǒng)使用不同協(xié)議來進行開發(fā)通信是很正常的,但是子系統(tǒng)之間通信和數(shù)據(jù)傳輸就存在協(xié)議轉(zhuǎn)化的問題了,有的子系統(tǒng)可能使用HTTP協(xié)議通信,有的子系統(tǒng)使用Dubbo協(xié)議通信,那這兩個協(xié)議的數(shù)據(jù)格式不一致,二者就不能互通有無了,就像廣東人說廣東話,浙江人說浙江話,如果沒有統(tǒng)一的語言(比如普通話來進行轉(zhuǎn)化),那么廣東人與浙江人是無法進行交流的。同樣,有了API網(wǎng)關將不同的通信協(xié)議適配成通用協(xié)議(如json、xml),從此子系統(tǒng)與子系統(tǒng)之間的通信就再也不是問題了。雖然中國有56個民族,上百種方言,各地的人們聚集在一起使用普通話還是能進行交流。
流量監(jiān)控與容錯主要指的是流量控制、服務降級。因為API網(wǎng)關是唯一的入口,所以當后端服務無法承載業(yè)務請求時,如果流量持續(xù)的進來就會導致有些請求無法處理,造成不好的用戶體驗。這時候通過API網(wǎng)關就可以限制流入的請求,讓后端服務器免受沖擊。就像全國各地的人來到北京要去參觀北大校園時,因為學校的空間有限,承載不了無限的人數(shù),保安就會通過校門攔截一部分游客,實現(xiàn)分流入園。服務降級就是指當應用服務出現(xiàn)異常時,通過API網(wǎng)關把用戶的請求導入到其它服務或者降級提示服務暫時不可用,同時再通過服務注冊中心監(jiān)聽存在問題的服務,一旦服務恢復再把請求恢復,就像是北大校園因為軍訓原因而不能對外提供參觀服務時,保安就會告知游客白天無法參觀,傍晚不軍訓時可進入校園參觀。
安全防護主要是指統(tǒng)一的安全認證、黑白名單等技術。安全是非常重要的,所以對于應用服務器的請求都需要擁有權限,通過API網(wǎng)關來進行權限認證是最高效率的方式。目前系統(tǒng)常見的權限管理做法是用戶通過登陸服務獲取Token(標記/令牌),把它存在客戶端,每次請求的時候把該Token放在Header里發(fā)送給服務器,API網(wǎng)關解析該Token,知道誰來訪問,能做什么事情,從而提高系統(tǒng)的安全性。
隨著用戶的增多、業(yè)務接入的復雜、流量的增長,API網(wǎng)關也在不斷的成長,在每個階段核心要求都不一樣,總的來說包括三個階段,基礎階段、快速發(fā)展階段、平臺化階段。
在基礎階段,用戶規(guī)模不大、流量不多,因此只需要建設基礎能力即可,即統(tǒng)一接入、協(xié)議適配、服務注冊,能夠完成一個用戶請求從前端到后臺的操作。
在快速發(fā)展階段,用戶開始大量增長、業(yè)務規(guī)模也變得復雜、流量開始增多,這個時候API網(wǎng)關需要保障安全、穩(wěn)定、性能。對于穩(wěn)定,可以理解為無論什么時候都不要出現(xiàn)業(yè)務不可用的情況,通過對入口請求的限流、對后端服務的降級處理、將不同業(yè)務之間流量隔離、彈性伸縮動態(tài)擴容實現(xiàn)業(yè)務的穩(wěn)定性,對于安全,可以理解為服務接入時進行鑒權處理。對于性能,可以理解為通過豐富的性能測試場景(如基準性能測試、容量性能測試、穩(wěn)定性測試、異常性測試)和線上監(jiān)控平臺的搭建,保障服務的業(yè)務可用、訪問不延遲。
在平臺化階段,用戶的增長、業(yè)務規(guī)模、流量已經(jīng)達到超大的量級,這時候API網(wǎng)關開始向開放平臺發(fā)展(比如微信公眾平臺),需要聚焦于第三方能高效接入、開放、安全。開放平臺就有點像SaaS的模式,需要有前端頁面,需要支持多租戶來允許多個用戶使用,需要有完善的解決方案、幫助文檔、支持中心、身份管理、信息維護、應用創(chuàng)建等。而API的開放則涉及API的生命周期管理、API接口維護更新等。同時還需要對應的運營管理能力支持,比如開發(fā)者管理、應用管理、文檔管理、工單管理等。
在本文中我們對網(wǎng)關、API網(wǎng)關、API網(wǎng)關發(fā)展的三個階段進行了查漏補缺的介紹,相信只要好好“復習”,大家也一定能收獲心儀的offer~各位加油咯