API網關充當客戶機和許多需要訪問的服務之間的中間人,它處理請求驗證、身份驗證和授權、速率限制、請求路由和請求/響應轉換。

API 通常被稱為應用程序從后端服務訪問數據和業務邏輯的前門。API 本質上是一個軟件向其他人或程序提供的接口,允許他們與該軟件進行交互。

在創建 API 時,需要選擇編程語言(Java、Python、PHP 等)來編寫 API 邏輯,還需要將 API 部署到服務器上,并監控 API,以確保基礎設施有足夠的能力處理大量請求。

API網關將這些步驟抽象出來,你不需要編寫太多代碼,也不用擔心管理底層基礎設施,你只需要創建客戶端可以發送請求的API端點。

主要的云提供商都提供完全托管的API網關服務:

  • AWS API 網關[1]
  • GCP API網關[2]
  • Azure API管理[3]
  • 阿里云 API網關[4]

本文將解釋為什么應該使用 API 網關,它們是如何工作的,我們將查看實際應用中的 API 網關示例。

我們將介紹的內容:

  • 1.為什么要使用API網關?
  • 2.API網關的工作原理
  • 2.1 請求驗證
  • 2.2 授權和認證
  • 2.3 速率限制
  • 2.4 請求路由
  • 2.5 請求和響應轉換
  • 3.真實世界的例子
  • End

1.為什么要使用API網關?

API網關(API Gateway)是一種完全托管的服務,它使開發人員能夠更輕松地創建、發布、維護、監控和保護幾乎任何規模的API。

在云計算環境中,“完全管理”是指服務的維護和管理責任由云提供商負責,這意味著底層基礎設施、軟件更新、安全、可擴展性、可用性和災難恢復都由云提供商管理。

這種抽象主要讓開發人員的工作變得更容易,因為他們只需專注于開發服務,而不必擔心管理它。

在這種情況下,這種抽象的代價是靈活性的損失,大多數云提供商提供的API網關對每秒處理的請求數量(RPS)有一個硬限制。

使用 API 網關等托管服務的云成本也較高,必須與從頭開始構建 API 所需的較高開發人員天數(開發人員數量 * 工作天數)進行權衡。

為了真正理解使用 API Gateway 的好處,讓我們來看看設計、編寫和部署傳統 API 所需遵循的步驟:

「步驟1:定義需求和范圍」

  • 了解目標用戶或系統的需求。
  • 確定API將公開的數據和功能。

「步驟2:設計API」

  • 定義API端點和方法(GET、POST、PUT、DELETE)。
  • 設計請求和響應格式(通常是 JSON 或 XML)。
  • 指定API將與之交互的數據模型和資源。
  • 計劃錯誤處理和狀態代碼。

「步驟3:開發API」

  • 選擇編程語言和框架。
  • 按照設計階段定義的 API 端點進行實現。
  • 根據需要與數據庫或其他服務集成。
  • 確保安全實踐得到實施,如輸入驗證和速率限制。

「步驟4:部署API」

  • 選擇托管解決方案(云提供商,現場服務器)。
  • 設置部署環境。
  • 將 API 部署到服務器。

「步驟5:監控和維護API」

  • 監控 API 的正常運行時間、性能和錯誤。
  • 定期更新API以修復錯誤和補丁安全漏洞

使用 API 網關,您主要需要關注步驟 1、步驟 2 和步驟 3 的部分內容,其他步驟大多被抽象出來并由 API 網關處理。

使用 API 網關的主要原因是簡化開發和維護 API 的過程。

2.API網關的工作原理

API網關同時做很多事情。

為了理解 API 網關的工作原理,我們來打個比方。

API網關就像ma?tre d’(法語,意思是領班服務員),ma?tre d’通常出現在高檔餐廳,盡管這是一個正在慢慢消失的職業。

領班是客人和餐廳員工之間的聯絡人,負責:

  1. 「問候和安排座位」:領班通常是客人到達餐廳時遇到的第一個人。他們熱情地歡迎客人,詢問預訂情況,并協助客人就座,考慮到偏好和特殊要求。
  2. 「預訂」:領班負責管理預訂,確保桌子被有效分配。他們跟蹤可用的桌子和預訂時間,做出必要的調整以滿足客人的需求。
  3. 「管理等待時間」:在繁忙時期,領班通過提供預計等待時間和提供替代方案,如在酒吧或等候區為客人安排座位,來管理客人的等待時間。
  4. 「解決問題」:如果客人用餐期間出現任何問題或顧慮,領班應及時介入并解決問題,確保客人滿意。
  5. 「處理特殊要求」:如果客人有特殊要求或飲食限制,領班會將這些信息傳達給廚房,并確保客人的需求得到滿足。

簡而言之,領班是餐廳里一個擁有多種才能和職責的人,從下面的圖片中,我們可以看到領班是如何作為顧客和他們可能需要的溝通者。

領班是顧客和他們可能需要的任何東西之間的溝通者

API網關的工作方式類似,它充當客戶機與其可能需要訪問的許多服務之間的通信器。

API網關充當客戶機和它們可能需要訪問的許多服務之間的中間人

讓我們更詳細地研究一下API網關能做什么。

2.1 請求驗證

這包括檢查傳入的請求,以確認它們在轉發到后端服務之前符合預定義的標準。

這可能包括檢查請求的結構、驗證數據類型、確保存在所需的參數,以及根據模式驗證查詢參數、頭和請求體。

通過這樣做,API網關作為第一道防線,防止格式不規范或惡意請求到達后端系統。

用餐廳的比喻,這類似于在餐廳門口等待迎接客人的領班,但記住,這是一個高檔餐廳,所以領班要確保客人的著裝符合餐廳的著裝規范 —— 類似于根據預定義的模式驗證傳入的 API 請求。

2.2 授權和認證

身份驗證是驗證發出請求的用戶或服務的身份的過程,通常通過用戶名和密碼、令牌或 API 密鑰等憑據進行驗證。

通過身份驗證后,授權將決定已通過身份驗證的實體有權訪問或執行哪些資源或操作。

API網關通常與身份提供者集成,并支持各種身份驗證和授權機制,如OAuth、JWT、API密鑰等。它們確保只有合法的、授權的請求才能通過后端服務。

身份驗證關注的是“誰”,而授權關注的是“權限”。

對于迎接客人進入餐廳的領班來說,身份驗證涉及到客人證明他們就是自己所說的那個人,通常是通過出示某種形式的身份證件,其中的照片可以與他們的臉匹配。

授權將涉及檢查他們是否有預約,也就是說他們有權進入餐廳點餐。

2.3 速率限制

速率限制涉及到控制用戶或服務在指定時間范圍內可以發出的請求數量,通常定義為每秒請求數量的限制(RPS)。

速率限制有助于避免后端服務的過載,確保它們仍然可用。速率限制也被用作成本控制策略的一部分,因為您將為發送到 API 網關的每個請求付費。

API網關可以根據訪問的用戶、服務或端點實施不同的速率限制策略。

以我們的餐廳類比為例,想象一下我們的餐廳里有客人,他們都經過了驗證、認證和授權進入餐廳。但是這些客人特別饑餓和口渴,不斷點餐和飲料。在某個時刻,這對餐廳來說變得難以管理。廚師和服務員過度勞累,沒有能力接受任何新的訂單,盤子和餐具都用完了,廚房里的食物也快用完了。

主廚可以介入并限制顧客的訂單數量,例如,限制每小時可以點的主菜或葡萄酒的數量,限額限制可以確保餐廳不會超負荷,仍然能夠為新顧客服務。

2.4 請求路由

API 網關根據 URL 路徑、HTTP 方法、標頭或查詢參數等各種條件管理傳入請求到適當后端服務的路由。它是微服務架構不可或缺的一部分,其中不同的服務處理 API 的不同部分。

回到我們之前的餐廳比喻,根據客人的目的,領班會將他們引向合適的人或地方——用餐者引向服務員,只想喝酒的客人引向吧臺,詢問預訂餐廳活動的人引向活動協調員。

2.5 請求和響應轉換

這涉及到在請求和響應通過 API 網關時對其進行修改。

對于請求,這可能意味著添加、刪除或修改頭部、重寫 URL,甚至更改請求體。對于響應,這可能涉及更改狀態代碼、修改頭部或轉換體。

這種功能允許 API 網關作為一個中介,可以轉換請求和響應,以滿足客戶機和后端服務的需求。

后端服務也可以執行這種請求和響應轉換。關于哪個組件(API網關或后端服務)進行轉換的決定是主觀的。但是,API網關通常是一個理想的地方,以最小的努力集中這種轉換,而不是在每個后端服務中進行自定義轉換。

例如,如果餐廳的客人不耐麩質,那么他們的訂單就必須改變,以確保餐點不含任何麩質。

這種訂單轉換的邏輯可以通過領班在把訂單發給主廚之前明確地指出哪些食材應該被排除在菜單之外來實現,也可以在廚房里通過領班簡單地告訴主廚客人點了一道無麩質菜肴,并讓他相應地修改訂單來實現。

3.真實世界的例子

微服務架構是一種開發軟件的方法,它將大型應用程序分解為更小的、獨立的組件,稱為微服務。每個微服務都是一個自包含的單元,在更廣泛的應用程序中具有特定的功能或責任。

下圖顯示了一個基本的電子商務應用程序的簡單微服務架構。

電子商務網站微服務架構中使用的API網關

  • 「客戶端」:這些是與電子商務平臺交互的不同客戶端。它們可以是移動應用程序、網頁瀏覽器或任何其他第三方應用程序。
  • 「API網關」:作為所有類型客戶機的單一入口點,它根據請求的性質(與用戶相關、與產品相關、與訂單相關)將請求路由到適當的微服務。
  • 「服務」:這些是電子商務網站特定的微服務示例。每個服務處理業務邏輯的不同方面,如用戶配置文件、產品目錄和訂單處理。
  • 「數據庫」:每個微服務都有自己的專用數據庫,確保數據隔離和服務獨立性。

在這個例子中,API網關是:

  1. 確保每個客戶的請求都經過「驗證」
  2. 確保客戶在進行一些操作(如訂購或撰寫產品評論)之前得到「身份驗證和授權」。
  3. 「速率限制」請求,以確保服務不會因發送大量請求的惡意行為而關閉。
  4. 根據不同的條件(如 URL 路徑、HTTP 方法、頭部或查詢參數)將「客戶機請求路由」到適當的后端服務。
  5. 處理「請求和響應轉換」。例如,來自 Product Service 的響應可能具有復雜的格式和廣泛的細節。API 網關將此響應轉換為更適合移動應用程序的格式。這可能涉及簡化數據,將其轉換為更輕的格式,或僅提取移動應用程序所需的基本信息。

End

API網關是一種完全托管的服務,它使開發人員能夠更輕松地創建、發布、維護、監控和保護幾乎任何規模的API,由于是完全托管的,它抽象了管理和維護底層基礎設施所需的工作——這由提供服務的云提供商處理。

API網關充當客戶機和許多需要訪問的服務之間的中間人,它處理請求驗證、身份驗證和授權、速率限制、請求路由和請求/響應轉換。

它在微服務架構中特別有用,作為管理、處理和將傳入請求路由到適當微服務的中心入口點,在簡化客戶端交互和為一組微服務提供中心接口方面發揮著至關重要的作用。