前端科普:什么是API網(wǎng)關? 為什么它有用?

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































