API 網關(API Gateway)學習


我是做客戶端開發的,老是聽到服務端開發的同學提到網關,最近培訓課上一位老師又講到了網關,雖然不知道是什么,但是聽他講的就是很好,非常方便,所以就來學習一下了。

 

1. 什么是 API 網關(API Gateway)

1.1. 定義

API 網關是一個處於應用程序或服務(提供 REST API 接口服務)之前的系統,用來管理授權、訪問控制和流量限制等,這樣 REST API 接口服務就被 API 網關保護起來,對所有的調用者透明。因此,隱藏在 API 網關后面的業務系統就可以專注於創建和管理服務,而不用去處理這些策略性的基礎設施。

網關的角色是作為一個 API 架構,用來保護、增強和控制對於 API 服務的訪問。

 

 

1.2. 職責

 

 

2. 為什么用API Gateway

API gateway是位於客戶端和API之間的一個單點入口,它作為反向代理將客戶端請求路由到后面的一組API。同時,API gateway可以承擔cross-cutting交叉功能,如安全與認證,請求速率管理,日志,緩存等。

如果沒有API gateway,客戶端就會直接把請求發給API,此時可能會有下列問題:

1)客戶端調用代碼復雜,客戶端需要和多個API交互,並且處理來自不同API的不同錯誤。

2)客戶端與API之間的耦合度高,客戶端需要知道各個API的調用細節,當API的接口發生變化,客戶端也需要進行更改。

3)客戶端的一次操作可能需要調用多個API接口,此時會產生多次網絡調用並增加延遲。

4)每個面向公共網絡調用的API都需要實現安全,請求速率管理等功能,都需要經過安全測試。

5)API必須使用對調用端友好對通信協議,如http或者websocket。

3. 如何使用API Gateway

API Gateway是一個服務器,它是系統的單一入口點。它類似於面向對象設計中的立面模式。API Gateway封裝了內部系統體系結構,並提供了適合每個客戶端的API。它可能具有其他職責,如身份驗證、監視、負載平衡、緩存、請求形成和管理以及靜態響應處理。
下圖顯示了API Gateway通常是如何適應體系結構的:

 

 

 

API Gateway負責請求路由、組合和協議轉換。所有來自客戶端的請求首先通過API Gateway。然后它將請求路由到適當的微服務。API Gateway通常通過調用多個微服務並聚合結果來處理請求。它可以在內部使用的web協議(如HTTP和WebSocket)和web不友好協議之間進行轉換

API Gateway還可以為每個客戶端提供自定義API。它通常為移動客戶端公開粗粒度API。例如,考慮產品詳細信息場景。API Gateway可以提供一個端點(/productdetails?productid=xxx),使移動客戶端能夠通過一個請求檢索所有產品細節。API Gateway通過調用各種服務(產品信息、建議、評論等)並結合結果來處理請求。

Netflix 是使用API Gateway的一個成功案例, Netflix流媒體服務可以在數百種不同的設備上使用,包括電視、機頂盒、智能手機、游戲系統、平板電腦等。最初,Netflix試圖為其流媒體服務提供一種一刀切的API。然而,他們發現,由於設備的多樣性和他們獨特的需求,它並不能很好地工作。今天,他們使用一個API Gateway,通過運行特定於設備的適配器代碼為每個設備量身定制API。適配器通常通過平均調用6到7個后端服務來處理每個請求。Netflix API Gateway每天處理數十億個請求。

圖片描述

4. 哪些API Gateway產品推薦

目前社區的關於 API Gataway 的項目有以下這些:
Tyk:Tyk是一個開放源碼的API網關,它是快速、可擴展和現代的。Tyk提供了一個API管理平台,其中包括API網關、API分析、開發人員門戶和API管理面板。Try 是一個基於Go實現的網關服務。
Kong:Kong是一個可擴展的開放源碼API Layer(也稱為API網關或API中間件)。Kong 在任何RESTful API的前面運行,通過插件擴展,它提供了超越核心平台的額外功能和服務。
Orange:和Kong類似也是基於OpenResty的一個API網關程序.
Netflix zuul:Zuul是一種提供動態路由、監視、彈性、安全性等功能的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。
apiaxle: Nodejs 實現的一個 API 網關。
api-umbrella: Ruby 實現的一個 API 網關。

AWS API gateway

Spring Cloud Gateway

 

參考資料:

https://www.jianshu.com/p/1803b8609e0b

https://www.imooc.com/article/287392

https://blog.csdn.net/rain_web/article/details/102469745

 

AMQP:(高級消息隊列協議)

https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

 

REST API:

https://blog.csdn.net/D_R_L_T/article/details/82562902


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM