讓咱們假設您正在構建一個使用Microservice體系結構模式的在線商店,而且您正在實現產品詳細信息頁面。您須要開發產品詳細信息用戶界面的多個版本:html
此外,在線商店必須經過REST API公開產品詳細信息,以供第三方應用程序使用。
產品詳細信息UI能夠顯示有關產品的大量信息。例如,POJO in Action的Amazon.com詳細信息頁面顯示:前端
因爲在線商店使用微服務架構模式,所以產品詳細信息數據分佈在多個服務上。例如,java
所以,顯示產品詳細信息的代碼須要從全部這些服務中獲取信息。git
基於微服務的應用程序的客戶端如何訪問各個服務?github
微服務提供的API的粒度一般與客戶端所需的不一樣。微服務一般提供細粒度的API,這意味着客戶端須要與多個服務進行交互。例如,如上所述,須要產品細節的客戶端須要從衆多服務中獲取數據。spring
不一樣客戶須要不一樣的數據。例如,產品詳細信息頁面桌面的桌面瀏覽器版本一般比移動版本更精細。後端
不一樣類型的客戶端的網絡性能不一樣。例如,移動網絡一般比非移動網絡慢得多且具備更高的延遲。固然,任何WAN都比LAN快得多。這意味着本機移動客戶端使用的網絡與服務器端Web應用程序使用的LAN具備很是不一樣的性能特徵。服務器端Web應用程序能夠對後端服務發出多個請求,而不會影響用戶體驗,由於移動客戶端只能作一些。api
服務實例的數量及其位置(主機+端口)動態變化瀏覽器
對服務的分區可能會隨着時間的推移而發生變化,應該從客戶端隱藏安全
服務可能使用各類協議,其中一些協議可能不適合Web
實現API網關,它是全部客戶端的單一入口點。API網關以兩種方式之一處理請求。有些請求只是代理/路由到適當的服務。它經過扇出多個服務來處理其餘請求。
API網關能夠爲每一個客戶端公開不一樣的API,而不是提供一個通用的樣式API。例如,Netflix API網關運行特定於客戶端的適配器代碼,該代碼爲每一個客戶端提供最適合其要求的API。
API網關也能夠實現安全性,例如驗證客戶端是否有權執行請求
此模式的變體是前端模式的後端。它爲每種客戶端定義了一個單獨的API網關。
在此示例中,有三種客戶端:Web應用程序,移動應用程序和外部第三方應用程序。有三種不一樣的API網關。每一個都爲其客戶提供API。
使用API網關具備如下好處:
API網關模式有一些缺點:
問題: