
從商業角度探討 API 設計
請看一個電子商務應用程序復雜頁面(例如產品頁面)的案例研究。如果我們看一下下面的亞馬遜產品列表頁面,就會發現這個特定頁面需要呈現大量信息。
為了便于說明,讓我們列出呈現上述特定頁面可能需要的所有微服務。
考慮到搜索產品、庫存、發貨、評級和評論、推薦引擎、招商以及金融和保險是用于呈現上述頁面的七個(7)不同的微服務。
附注:以上七個微服務只是解釋 API 網關概念的一個假設。實際上,亞馬遜可能有不同數量的微服務。
問題所在:由于這些微服務已分別部署在不同的服務器上,如果客戶端想要訪問這些服務,一個頁面至少需要七次調用
但這種方法真的好嗎?我不認為這是一種值得推薦的方法,因為我們必須進行七個不同的調用,這肯定會影響性能、資源消耗、加載時間等。客戶端也與所有服務緊密耦合,假設我們必須將 “評論 “和 “評級 “微服務分離到兩個不同的服務中,我們就必須更新客戶端代碼。客戶端必須調用一次才能獲得評論,調用一次才能獲得評級,這確實不是最好的處理方式。
解決方案
那么,建議采用什么方法呢?API 網關,我們在客戶端和微服務之間有一個稱為 API 網關的層。它是所有微服務的前端服務。現在任何客戶端想要訪問微服務,客戶端都必須調用API網關。現在,API 網關反過來調用所有微服務并獲取我們可能需要的任何響應。這個過程稱為 API 組合。
簡而言之,API 網關位于客戶端和微服務之間,充當所有微服務的網關。
不僅如此,使用 API 網關還能讓我們在很多方面受益。
API 網關有利于我們實施 A/B 測試、緩存、管理訪問配額、API 運行狀況監控、API 版本控制、Chaos monkey testing、貨幣化等等。讓我們來談談以下一些好處。
每次執行 API 調用時,都必須使用公共 IP 地址訪問服務。這暴露了風險。
通過切換到 API 網關,只能使用私有 IP 地址來訪問這些微服務。這導致數據交易的方式更加安全。此外,API網關的使用還可以保護數據免受惡意和DDoS攻擊。
為了確保安全性,TLS 證書是必要的,API Gateway 通過將我們的所有 API 保留在單個靜態 IP 或域后面并通過密鑰、令牌和 IP 過濾幫助保護它們來處理所有這些問題。
確保對登錄應用程序的用戶進行身份驗證和授權非常重要。 API 網關是一個單一入口,可以輕松滿足所有要求。因此,它只允許授權用戶登錄,并允許通過身份驗證的用戶進行更改,從而獲得容錯能性。
在出現多個請求且流量不斷增加的情況下,API Gateway 可以幫助處理。它是通過創建多個服務并像Round-Robin一樣調用它們來完成的。它可以根據用戶細分來管理和路由客戶端請求。因此,可為不同用戶提供不同質量或速度的內容。
考慮這樣一個用例:定義了兩個微服務,分別用于為臺式機和移動設備返回低質量圖像/視頻和高質量圖像/視頻
在這種情況下,我們可以配置一個 API 網關,使其充當路由器,如果請求來自移動設備,它將把請求路由到低質量的圖片/視頻服務,如果請求是來自臺式機,它可以路由到高質量的圖像/視頻服務。該路由可以基于標頭、路徑和參數等來完成。
如果應用程序中添加或刪除了一個或多個微服務,我們將不會更新客戶端代碼。在這種情況下,我們需要對API網關本身進行一些更改,以根據更新的微服務進行調用。
通過微服務提供靜態文件(HTML、JS、CSS、字體)并不是最佳用途,在這種情況下,我們可以將這些文件移動到 API 網關。
API網關可以保存所有靜態內容,直接為客戶端服務。同樣,考慮評估趨勢產品的服務,這些趨勢是每小時或每天計算的。因此,一旦計算出其余時間的趨勢,服務將重復返回相同的響應。在這種情況下,API 網關具有稱為響應緩存的功能,我們可以在其中提及需要緩存響應的 URL 和閾值時間。
如果我們想利用像 Web 套接字或較新版本的 HTTP(即 HTTP/2)這樣的協議,即使我們的后端服務尚未準備好或與 HTTP/2 或 Web 套接字不兼容,API 網關也可以采用將新協議轉換為舊協議的責任。它可以充當協議適配器。
Kong Gateway是建立在輕量級代理之上的最流行的開源云原生API網關。它是在Nginx的幫助下用Lua編寫的。它是一個有助于加速事件時間的模板引擎。Kong保證為我們所有的微服務應用提供無與倫比的延遲性能和可擴展性,無論它們運行在哪里。納斯達克、霍尼韋爾、思科、FAB、Expedia、三星、西門子和雅虎日本等公司廣泛使用Kong API網關。
Kong提供的一些功能包括:
Kong擁有出色的文檔和集成
Apache APISIX最初誕生于中國的知流科技,后期進入Apache孵化器并開源。該項目副總裁Ming Wen表示,這個API網關解決了云原生和微服務帶來的各種挑戰。Apache ApiSix被360、HelloTalk、網易、TravelSky等公司所使用。
Apache APISIX基于Nginx和etcd,具有動態路由和插件熱加載功能,特別適合微服務系統下的API管理。
Tyk是一個企業級的開源API網關。您可以選擇使用自托管或托管。
以下是TYK提供的一些開箱即用的特性:
TYK也可以在AWS市場上使用。如果您的應用程序堆棧在AWS上,這是一個不錯的選擇。
Ocelot是一個.net API網關.該項目旨在使用.net運行微服務或面向服務的體系結構,這些體系結構需要一個統一的系統入口點。但是,它可以與任何使用HTTP的東西一起工作,并在ASP支持的任何平臺上運行.NET核心支持。
Ocelot以特定的順序充當中間件。它操縱HttpRequest對象進入其配置指定的狀態,直到它到達請求構建器中間件。它創建一個HttpRequestMessage對象,用于請求下游服務。發出請求的中間件是Ocelot管道中的最后一件事。它不調用下一個中間件。中間件部分將HttpResponseMessage映射到HttpResponse對象,并返回給客戶端。
Ocelot提供了諸如路由、身份驗證、速率限制、緩存、負載平衡等標準特性。它不支持分塊編碼、轉發主機報頭和Swagger。
悟空API網關是EOLINK公司的一個傘形項目。它是一個基于golang的微服務網關,支持高性能動態路由、服務編排、多租戶管理、API訪問控制等功能。悟空提供了一個圖形界面和一個插件系統,使配置更容易,擴展更方便。除了標準特性,Goku還提供集群、熱更新、警報、日志記錄等功能。
Express Gateway是基于Express.js構建的。Express Gateway是一組圍繞Express聲明式構建的組件,以滿足API Gateway用例。Express Gateway的強大功能利用了圍繞Express中間件的豐富生態系統。像Joyent、The Linux Foundation、VIRICITI、Switch Media、Coozy和Musement等公司都在廣泛使用Express網關。它簡單、快速,并提供所有基本功能。
Gloo是面向云原生環境的下一代全功能API網關和入口控制器。它建立在Envoy Proxy上,用于連接、保護和控制跨應用程序服務的流量。Gloo支持連接到廣泛的工作負載,以保護和管理這些工作負載,并且它在功能級路由方面非常出色。它可以作為開源和企業使用。企業版提供以下功能:
KrakenD是一個超高性能的開源API網關。它的核心功能是創建一個API,將許多微服務聚合到單個端點,為您自動完成繁重的工作:聚合、轉換、過濾、解碼、節流、驗證等等。它提供了一種創建端點的聲明性方法。它具有良好的結構和分層,并且可以使用社區或內部開發的即插即用中間件擴展其功能。KrakenD聲稱比Kong和Tyk都快。
Fusion是一個API管理系統,因為它幫助開發實際的API端點(即,從數據庫請求和轉換數據)。它并不局限于對另一個API的代理請求。它提供了一個簡單直觀的后端來控制和管理API。Fusion提供的一些功能包括:
WSO2是一個完整的生命周期API管理解決方案,可以在任何地方運行。它可以部署在本地、云上,或者以混合方式部署,其中其組件可以跨多個云和本地基礎設施進行分布和部署。包含一個云原生API網關,并提供一個Kubernetes操作符,可以輕松地將原始微服務轉換為托管API。API Manager集成了服務網格,提供了一個完整的管理平面和控制平面,用于管理、監控和貨幣化API和API產品。它在一個清晰集成的系統中支持API發布、生命周期管理、應用程序開發、訪問控制、速率限制和分析。
Apigee是Google Cloud的一個跨云API管理平臺。
它有以下幾種特性:
Endpoint是Google Cloud的輕量級Apigee版本。它最適合開發人員在任何Google Cloud后端上開發、部署和管理api。它從App Engine應用程序為其客戶端提供工具和庫。谷歌云端點與其他產品緊密集成,如用于監控的Trace和Logging,用于身份驗證的Auth0和Firebase,用于自動部署的GKE和App Engine等。
AWS可以提供運行應用程序所需的任何東西。API也是如此,Amazon API Gateway(亞馬遜API網關)是一種完全托管的服務,可以讓開發人員輕松地在任何規模下形成->發布->維護和保護API。它同時支持RESTful和WebSocket api,并允許我們啟用實時雙向通信。可以通過了解AWS云存儲網關,看看網關是如何工作的。
如果您的微服務或API已經托管在AWS上,那么與Amazon API Gateway集成是有意義的。他們在免費層下提供了100萬個API調用,這對你了解它是如何工作的很有好處。
Microsoft Azure在云中、本地或混合中提供端到端API管理。您可以通過REST API和SDK以編程方式管理API。如果您使用SOAP,可以導入其SOAP服務的web服務描述語言(WSDL), Azure將創建SOAP前端。它們提供所有標準功能,包括盈利。
使用MuleSoft管理API并提高業務效率。它允許您在任何地方創建、保護、管理和治理通用api。您可以使用CI/CD管道和新的CLI來發現api,從而加速應用程序的交付。MuleSoft允許您使用不同的協議設計api,同時遵守治理標準并保持高質量。從api收集數據以探索、提供服務并將所有數據統一到GraphQL查詢中。這可以在DataGraph的幫助下完成。
使用MuleSoft靈活的網關,您可以管理您的服務,而無需擔心大小,云或語言。MuleSoft提供了一個控制面板,您可以在其中分析、管理和保護您的api、微服務和用戶。發展最新的業務模式和收入流,通過關注采用、API社區和消費過程來最大化您的API價值。
此外,MuleSoft還提供Anypoint Exchange,將您的api與單一事實來源集成在一起,為您的業務提供動力。您可以使用Anypoint API治理將API治理投入運行,而不包含開發開銷。
當您擁有可以幫助您的企業有效地部署、管理和保護API的Boomi API管理服務時,不要考慮復雜性。
Boomi API管理可以在任何平臺上處理API的完整生命周期。這使您可以輕松地配置api并實現集成。它有一個智能且易于使用的UI,每次使用它的API代理都可以為您的業務提供數據。發布、控制和管理api(無論是在云中、邊緣還是本地),并有效地管理和控制數據訪問。Boomi允許您創建跨社交、物聯網和移動網絡的全渠道體驗。
您可以使用它的API Developer Portal輕松地從現有應用程序訪問數據。
Boomi提供了無窮無盡的特性,例如中介、版本控制、參與、身份驗證、策略管理、監視和應用程序管理。您可以根據需要維護不同版本的API,并確保對其采取正確的操作。
它還允許您部署帶有第三方身份驗證系統的api。
通過與一個簡單的向導Boomi AtmoSphere集成,您可以輕松地設計和管理api。
一旦您的 API 準備就緒,不要忘記對其進行監控和保護。
通過以上介紹,您應該對可用的 API 網關和管理解決方案有所了解。如果預算緊張,可以嘗試開源方案。最好先安裝一些,看看哪種適合你。