前端科普:什么是API網(wǎng)關(guān)? 為什么它有用?
API 通常被稱為應(yīng)用程序從后端服務(wù)訪問數(shù)據(jù)和業(yè)務(wù)邏輯的前門。API 本質(zhì)上是一個軟件向其他人或程序提供的接口,允許他們與該軟件進(jìn)行交互。
在創(chuàng)建 API 時,需要選擇編程語言(Java、Python、PHP 等)來編寫 API 邏輯,還需要將 API 部署到服務(wù)器上,并監(jiān)控 API,以確?;A(chǔ)設(shè)施有足夠的能力處理大量請求。
API網(wǎng)關(guān)將這些步驟抽象出來,你不需要編寫太多代碼,也不用擔(dān)心管理底層基礎(chǔ)設(shè)施,你只需要創(chuàng)建客戶端可以發(fā)送請求的API端點。
主要的云提供商都提供完全托管的API網(wǎng)關(guān)服務(wù):
- AWS API 網(wǎng)關(guān)[1]
- GCP API網(wǎng)關(guān)[2]
- Azure API管理[3]
- 阿里云 API網(wǎng)關(guān)[4]
本文將解釋為什么應(yīng)該使用 API 網(wǎng)關(guān),它們是如何工作的,我們將查看實際應(yīng)用中的 API 網(wǎng)關(guān)示例。
我們將介紹的內(nèi)容:
- 1.為什么要使用API網(wǎng)關(guān)?
- 2.API網(wǎng)關(guān)的工作原理
- 2.1 請求驗證
- 2.2 授權(quán)和認(rèn)證
- 2.3 速率限制
- 2.4 請求路由
- 2.5 請求和響應(yīng)轉(zhuǎn)換
- 3.真實世界的例子
- End
1.為什么要使用API網(wǎng)關(guān)?
API網(wǎng)關(guān)(API Gateway)是一種完全托管的服務(wù),它使開發(fā)人員能夠更輕松地創(chuàng)建、發(fā)布、維護(hù)、監(jiān)控和保護(hù)幾乎任何規(guī)模的API。
在云計算環(huán)境中,“完全管理”是指服務(wù)的維護(hù)和管理責(zé)任由云提供商負(fù)責(zé),這意味著底層基礎(chǔ)設(shè)施、軟件更新、安全、可擴(kuò)展性、可用性和災(zāi)難恢復(fù)都由云提供商管理。
這種抽象主要讓開發(fā)人員的工作變得更容易,因為他們只需專注于開發(fā)服務(wù),而不必?fù)?dān)心管理它。
在這種情況下,這種抽象的代價是靈活性的損失,大多數(shù)云提供商提供的API網(wǎng)關(guān)對每秒處理的請求數(shù)量(RPS)有一個硬限制。
使用 API 網(wǎng)關(guān)等托管服務(wù)的云成本也較高,必須與從頭開始構(gòu)建 API 所需的較高開發(fā)人員天數(shù)(開發(fā)人員數(shù)量 * 工作天數(shù))進(jìn)行權(quán)衡。
為了真正理解使用 API Gateway 的好處,讓我們來看看設(shè)計、編寫和部署傳統(tǒng) API 所需遵循的步驟:
「步驟1:定義需求和范圍」
- 了解目標(biāo)用戶或系統(tǒng)的需求。
- 確定API將公開的數(shù)據(jù)和功能。
「步驟2:設(shè)計API」
- 定義API端點和方法(GET、POST、PUT、DELETE)。
- 設(shè)計請求和響應(yīng)格式(通常是 JSON 或 XML)。
- 指定API將與之交互的數(shù)據(jù)模型和資源。
- 計劃錯誤處理和狀態(tài)代碼。
「步驟3:開發(fā)API」
- 選擇編程語言和框架。
- 按照設(shè)計階段定義的 API 端點進(jìn)行實現(xiàn)。
- 根據(jù)需要與數(shù)據(jù)庫或其他服務(wù)集成。
- 確保安全實踐得到實施,如輸入驗證和速率限制。
「步驟4:部署API」
- 選擇托管解決方案(云提供商,現(xiàn)場服務(wù)器)。
- 設(shè)置部署環(huán)境。
- 將 API 部署到服務(wù)器。
「步驟5:監(jiān)控和維護(hù)API」
- 監(jiān)控 API 的正常運(yùn)行時間、性能和錯誤。
- 定期更新API以修復(fù)錯誤和補(bǔ)丁安全漏洞
使用 API 網(wǎng)關(guān),您主要需要關(guān)注步驟 1、步驟 2 和步驟 3 的部分內(nèi)容,其他步驟大多被抽象出來并由 API 網(wǎng)關(guān)處理。
使用 API 網(wǎng)關(guān)的主要原因是簡化開發(fā)和維護(hù) API 的過程。
2.API網(wǎng)關(guān)的工作原理
API網(wǎng)關(guān)同時做很多事情。
為了理解 API 網(wǎng)關(guān)的工作原理,我們來打個比方。
API網(wǎng)關(guān)就像ma?tre d’(法語,意思是領(lǐng)班服務(wù)員),ma?tre d’通常出現(xiàn)在高檔餐廳,盡管這是一個正在慢慢消失的職業(yè)。
領(lǐng)班是客人和餐廳員工之間的聯(lián)絡(luò)人,負(fù)責(zé):
- 「問候和安排座位」:領(lǐng)班通常是客人到達(dá)餐廳時遇到的第一個人。他們熱情地歡迎客人,詢問預(yù)訂情況,并協(xié)助客人就座,考慮到偏好和特殊要求。
- 「預(yù)訂」:領(lǐng)班負(fù)責(zé)管理預(yù)訂,確保桌子被有效分配。他們跟蹤可用的桌子和預(yù)訂時間,做出必要的調(diào)整以滿足客人的需求。
- 「管理等待時間」:在繁忙時期,領(lǐng)班通過提供預(yù)計等待時間和提供替代方案,如在酒吧或等候區(qū)為客人安排座位,來管理客人的等待時間。
- 「解決問題」:如果客人用餐期間出現(xiàn)任何問題或顧慮,領(lǐng)班應(yīng)及時介入并解決問題,確??腿藵M意。
- 「處理特殊要求」:如果客人有特殊要求或飲食限制,領(lǐng)班會將這些信息傳達(dá)給廚房,并確??腿说男枨蟮玫綕M足。
簡而言之,領(lǐng)班是餐廳里一個擁有多種才能和職責(zé)的人,從下面的圖片中,我們可以看到領(lǐng)班是如何作為顧客和他們可能需要的溝通者。
領(lǐng)班是顧客和他們可能需要的任何東西之間的溝通者
API網(wǎng)關(guān)的工作方式類似,它充當(dāng)客戶機(jī)與其可能需要訪問的許多服務(wù)之間的通信器。
API網(wǎng)關(guān)充當(dāng)客戶機(jī)和它們可能需要訪問的許多服務(wù)之間的中間人
讓我們更詳細(xì)地研究一下API網(wǎng)關(guān)能做什么。
2.1 請求驗證
這包括檢查傳入的請求,以確認(rèn)它們在轉(zhuǎn)發(fā)到后端服務(wù)之前符合預(yù)定義的標(biāo)準(zhǔn)。
這可能包括檢查請求的結(jié)構(gòu)、驗證數(shù)據(jù)類型、確保存在所需的參數(shù),以及根據(jù)模式驗證查詢參數(shù)、頭和請求體。
通過這樣做,API網(wǎng)關(guān)作為第一道防線,防止格式不規(guī)范或惡意請求到達(dá)后端系統(tǒng)。
用餐廳的比喻,這類似于在餐廳門口等待迎接客人的領(lǐng)班,但記住,這是一個高檔餐廳,所以領(lǐng)班要確??腿说闹b符合餐廳的著裝規(guī)范 —— 類似于根據(jù)預(yù)定義的模式驗證傳入的 API 請求。
2.2 授權(quán)和認(rèn)證
身份驗證是驗證發(fā)出請求的用戶或服務(wù)的身份的過程,通常通過用戶名和密碼、令牌或 API 密鑰等憑據(jù)進(jìn)行驗證。
通過身份驗證后,授權(quán)將決定已通過身份驗證的實體有權(quán)訪問或執(zhí)行哪些資源或操作。
API網(wǎng)關(guān)通常與身份提供者集成,并支持各種身份驗證和授權(quán)機(jī)制,如OAuth、JWT、API密鑰等。它們確保只有合法的、授權(quán)的請求才能通過后端服務(wù)。
身份驗證關(guān)注的是“誰”,而授權(quán)關(guān)注的是“權(quán)限”。
對于迎接客人進(jìn)入餐廳的領(lǐng)班來說,身份驗證涉及到客人證明他們就是自己所說的那個人,通常是通過出示某種形式的身份證件,其中的照片可以與他們的臉匹配。
授權(quán)將涉及檢查他們是否有預(yù)約,也就是說他們有權(quán)進(jìn)入餐廳點餐。
2.3 速率限制
速率限制涉及到控制用戶或服務(wù)在指定時間范圍內(nèi)可以發(fā)出的請求數(shù)量,通常定義為每秒請求數(shù)量的限制(RPS)。
速率限制有助于避免后端服務(wù)的過載,確保它們?nèi)匀豢捎?。速率限制也被用作成本控制策略的一部分,因為您將為發(fā)送到 API 網(wǎng)關(guān)的每個請求付費(fèi)。
API網(wǎng)關(guān)可以根據(jù)訪問的用戶、服務(wù)或端點實施不同的速率限制策略。
以我們的餐廳類比為例,想象一下我們的餐廳里有客人,他們都經(jīng)過了驗證、認(rèn)證和授權(quán)進(jìn)入餐廳。但是這些客人特別饑餓和口渴,不斷點餐和飲料。在某個時刻,這對餐廳來說變得難以管理。廚師和服務(wù)員過度勞累,沒有能力接受任何新的訂單,盤子和餐具都用完了,廚房里的食物也快用完了。
主廚可以介入并限制顧客的訂單數(shù)量,例如,限制每小時可以點的主菜或葡萄酒的數(shù)量,限額限制可以確保餐廳不會超負(fù)荷,仍然能夠為新顧客服務(wù)。
2.4 請求路由
API 網(wǎng)關(guān)根據(jù) URL 路徑、HTTP 方法、標(biāo)頭或查詢參數(shù)等各種條件管理傳入請求到適當(dāng)后端服務(wù)的路由。它是微服務(wù)架構(gòu)不可或缺的一部分,其中不同的服務(wù)處理 API 的不同部分。
回到我們之前的餐廳比喻,根據(jù)客人的目的,領(lǐng)班會將他們引向合適的人或地方——用餐者引向服務(wù)員,只想喝酒的客人引向吧臺,詢問預(yù)訂餐廳活動的人引向活動協(xié)調(diào)員。
2.5 請求和響應(yīng)轉(zhuǎn)換
這涉及到在請求和響應(yīng)通過 API 網(wǎng)關(guān)時對其進(jìn)行修改。
對于請求,這可能意味著添加、刪除或修改頭部、重寫 URL,甚至更改請求體。對于響應(yīng),這可能涉及更改狀態(tài)代碼、修改頭部或轉(zhuǎn)換體。
這種功能允許 API 網(wǎng)關(guān)作為一個中介,可以轉(zhuǎn)換請求和響應(yīng),以滿足客戶機(jī)和后端服務(wù)的需求。
后端服務(wù)也可以執(zhí)行這種請求和響應(yīng)轉(zhuǎn)換。關(guān)于哪個組件(API網(wǎng)關(guān)或后端服務(wù))進(jìn)行轉(zhuǎn)換的決定是主觀的。但是,API網(wǎng)關(guān)通常是一個理想的地方,以最小的努力集中這種轉(zhuǎn)換,而不是在每個后端服務(wù)中進(jìn)行自定義轉(zhuǎn)換。
例如,如果餐廳的客人不耐麩質(zhì),那么他們的訂單就必須改變,以確保餐點不含任何麩質(zhì)。
這種訂單轉(zhuǎn)換的邏輯可以通過領(lǐng)班在把訂單發(fā)給主廚之前明確地指出哪些食材應(yīng)該被排除在菜單之外來實現(xiàn),也可以在廚房里通過領(lǐng)班簡單地告訴主廚客人點了一道無麩質(zhì)菜肴,并讓他相應(yīng)地修改訂單來實現(xiàn)。
3.真實世界的例子
微服務(wù)架構(gòu)是一種開發(fā)軟件的方法,它將大型應(yīng)用程序分解為更小的、獨立的組件,稱為微服務(wù)。每個微服務(wù)都是一個自包含的單元,在更廣泛的應(yīng)用程序中具有特定的功能或責(zé)任。
下圖顯示了一個基本的電子商務(wù)應(yīng)用程序的簡單微服務(wù)架構(gòu)。
電子商務(wù)網(wǎng)站微服務(wù)架構(gòu)中使用的API網(wǎng)關(guān)
- 「客戶端」:這些是與電子商務(wù)平臺交互的不同客戶端。它們可以是移動應(yīng)用程序、網(wǎng)頁瀏覽器或任何其他第三方應(yīng)用程序。
- 「API網(wǎng)關(guān)」:作為所有類型客戶機(jī)的單一入口點,它根據(jù)請求的性質(zhì)(與用戶相關(guān)、與產(chǎn)品相關(guān)、與訂單相關(guān))將請求路由到適當(dāng)?shù)奈⒎?wù)。
- 「服務(wù)」:這些是電子商務(wù)網(wǎng)站特定的微服務(wù)示例。每個服務(wù)處理業(yè)務(wù)邏輯的不同方面,如用戶配置文件、產(chǎn)品目錄和訂單處理。
- 「數(shù)據(jù)庫」:每個微服務(wù)都有自己的專用數(shù)據(jù)庫,確保數(shù)據(jù)隔離和服務(wù)獨立性。
在這個例子中,API網(wǎng)關(guān)是:
- 確保每個客戶的請求都經(jīng)過「驗證」
- 確保客戶在進(jìn)行一些操作(如訂購或撰寫產(chǎn)品評論)之前得到「身份驗證和授權(quán)」。
- 「速率限制」請求,以確保服務(wù)不會因發(fā)送大量請求的惡意行為而關(guān)閉。
- 根據(jù)不同的條件(如 URL 路徑、HTTP 方法、頭部或查詢參數(shù))將「客戶機(jī)請求路由」到適當(dāng)?shù)暮蠖朔?wù)。
- 處理「請求和響應(yīng)轉(zhuǎn)換」。例如,來自 Product Service 的響應(yīng)可能具有復(fù)雜的格式和廣泛的細(xì)節(jié)。API 網(wǎng)關(guān)將此響應(yīng)轉(zhuǎn)換為更適合移動應(yīng)用程序的格式。這可能涉及簡化數(shù)據(jù),將其轉(zhuǎn)換為更輕的格式,或僅提取移動應(yīng)用程序所需的基本信息。
End
API網(wǎng)關(guān)是一種完全托管的服務(wù),它使開發(fā)人員能夠更輕松地創(chuàng)建、發(fā)布、維護(hù)、監(jiān)控和保護(hù)幾乎任何規(guī)模的API,由于是完全托管的,它抽象了管理和維護(hù)底層基礎(chǔ)設(shè)施所需的工作——這由提供服務(wù)的云提供商處理。
API網(wǎng)關(guān)充當(dāng)客戶機(jī)和許多需要訪問的服務(wù)之間的中間人,它處理請求驗證、身份驗證和授權(quán)、速率限制、請求路由和請求/響應(yīng)轉(zhuǎn)換。
它在微服務(wù)架構(gòu)中特別有用,作為管理、處理和將傳入請求路由到適當(dāng)微服務(wù)的中心入口點,在簡化客戶端交互和為一組微服務(wù)提供中心接口方面發(fā)揮著至關(guān)重要的作用。