REST API 性能最佳實踐

在我之前的部分,我分享了一些關於如何設計有效的 REST API 的最佳實踐。

一個深思熟慮的設計還必須考慮到 API 的性能方面。如果 API 在應對不斷增加的請求和不斷變化的業務和 / 或客戶需求時不能達到預期的性能,那麼好的設計就沒有什麼意義。

那麼... 什麼是 API 性能?

就像任何性能一樣,API 的性能在很大程度上是關於 API 如何響應和運作,以迴應它所收到的不同類型的請求。

例子。假設我們有一個面向客戶的應用程序,顯示客戶的當前訂單。我們的應用程序從一個 API 中獲取訂單的詳細信息。但現在,客戶表示他們想在一個地方查看他們所有的訂單(過去和現在)。因此,我們建立了一個 "我的訂單" 頁面來顯示客戶的所有訂單。這意味着,我們的 API 現在將返回更多的數據,並且比之前返回的有效載荷更大。

我們如何確保我們的 API 能夠返回所有的數據呈現給我們的客戶,而不存在諸如:延遲、服務器端錯誤和過度請求等問題?

提高性能的技巧

1- 減少並限制有效載荷的大小

極大的響應數據的有效載荷會減慢請求的完成和其他服務的調用,並影響到性能的降低。如你所知,現在我們要返回客戶的所有訂單,而不僅僅是他們當前的訂單,我們將不得不處理一些性能下降的問題。

我們可以使用 GZip 壓縮來減少我們的有效載荷大小。

這減少了我們在網絡應用(客戶端)上的響應的下載量,同時也增加了上傳速度,或創建一些實體(訂單)。

我們可以在網絡 API 上使用 Deflate 壓縮。

或者,我們可以將 Accept-Encodingrequest 頭更新爲 gzip。

2- 啓用緩存

緩存是提高 API 性能的最簡單的方法之一。如果我們的請求經常給出相同的響應,那麼該響應的緩存版本有助於避免額外的服務調用 / 數據庫查詢。

你要確保在使用緩存時,定期使緩存中的數據失效,特別是在發生新的數據更新時。

例子。假設我們的客戶想下一個汽車零件的訂單,我們的應用程序調用了一些汽車零件的 API 來獲取零件的價格。由於響應(零件價格)每週只變化一次(上午 12:00),我們可以在這之前的其餘時間內緩存響應。這使我們不必每次都重新調用以返回相同的零件價格。

3- 提供足夠的網絡速度

一個緩慢的網絡會降低即使是設計得最堅固的 API 的性能。不可靠的網絡會導致停機,這可能導致你的組織違反 SLA、服務條款以及你可能對客戶作出的承諾。投資於適當的網絡基礎設施是很重要的,這樣我們就可以保持理想的性能水平。

這可以通過利用和購買足夠的雲資源和基礎設施來實現(例如:在 AWS,分配適當數量的 EC2 實例,使用網絡負載平衡器)。

此外,如果你有大量的後臺進程,在不同的線程上運行這些進程,以避免阻塞請求。你還可以使用鏡像和內容交付網絡(CDN),如 CloudFront,以便在全球不同地區更快地提供請求。

4- 防止意外請求、速度減慢和濫用

你可能會遇到這樣的情況:你的 API 遭受 DDoS 攻擊,這種攻擊可能是惡意的和故意的,也可能是無意的,當一個工程師調用 API 在某個本地應用程序的循環上執行時。

你可以通過測量交易,監測每個 IP 地址或每個 SSO/JWT 令牌(如果客戶 / 調用應用程序在調用 API 之前已經授權)發生多少交易來避免這種情況。

這種限制速度的方法有助於減少會減慢 API 速度的過度請求,有助於處理意外的調用 / 執行,並主動監測和識別可能的惡意活動。

5- 嘗試使用 PATCH 而不是 PUT

工程師們普遍認爲 PUT 和 PATCH 操作的結果是一樣的,這是一個誤區。

它們在更新資源方面是相似的,但它們各自執行的更新方式不同。

PUT 操作通過向整個資源發送更新來更新資源。PATCH 操作只對需要更新的資源應用部分更新。導致 PATCH 調用產生較小的有效載荷,並提高規模性能。

專業提示:儘管 PATCH 調用可以限制請求的大小,但你應該注意到,它並不是無能的。這意味着,一個 PATCH 有可能在一系列的多次調用中產生不同的結果。所以,你應該仔細和慎重地考慮你的應用程序使用 PATCH 請求,如果需要的話,確保它們是空閒實現的。如果沒有,請使用 PUT 請求。

6- 啓用日誌、監控和警報功能

這也許是你將在這裏讀到的最重要的提示之一。如果有一件事你應該從這篇文章中學到,那應該是這個! 在這一點上沒有商量的餘地。

有了日誌、監控和警報,就能幫助工程師在問題變成問題之前進行診斷和補救。許多 API(基於 Express/Node,Java,Go)都有預定義的端點,用於評估諸如。

如果你沒有啓用日誌記錄,而有一個潛在的問題正在發生,你將無法跟蹤源頭,或在一個特定的請求中發生的問題。

如果你沒有啓用監控,你將無法從分析的角度知道一些問題或錯誤發生的頻率。這就會妨礙你思考可能的解決方案。

而且...... 如果你沒有啓用警報功能,你將不知道是否有問題,直到一個客戶(或更糟糕的是,客戶)報告它。嚇人!

7- 啓用分頁功能

分頁有助於從多個響應中創建內容桶。這種優化有助於改善響應,同時保留傳輸 / 顯示給客戶的數據。

你可以對反應進行標準化、細分和限制,這有助於減少結果的複雜性,並通過只爲客戶要求的內容提供反應 / 結果來改善整體的客戶體驗。

最後的思考

我們知道,API 是驚人的,如果適當地優化和增強性能,可以爲企業和客戶提供極其強大的體驗。

業務需求和客戶期望總是隨着時間的推移而變化。而作爲負責任的工程師,我們要決定如何以高性能的方式構建我們的 API,這可以幫助我們實現並超越我們的目標。

這些提示只是冰山一角,在一般情況下適用於所有 API。根據你的特定 API 和用例,它與哪些服務互動,它被調用的頻率,從哪裏被調用等等,你可能必須以不同的方式實現這些提示。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Bu2I8zpImPxhdF0PiEwsCQ