七大妙招助你提升API的效能
導讀 | 深思熟慮的設計還必須考慮到 API 的效能,如果 API 不能響應越來越多的請求,不能滿足不斷變化的業務需求,不能按預期執行,良好的設計就毫無意義。 |
深思熟慮的設計還必須考慮到 API 的效能,如果 API 不能響應越來越多的請求,不能滿足不斷變化的業務需求,不能按預期執行,良好的設計就毫無意義。
與任何效能一樣,API 效能在很大程度上取決於 API 如何響應它收到的不同型別的請求。
比如:我們有一個客戶端應用程式,顯示客戶的當前訂單。應用程式從 API 獲取訂單詳細資訊。但現在,客戶表示,他們想檢視所有訂單。因此,我們構建了一個“我的訂單”頁面,用於顯示客戶的所有訂單。這意味著,我們的 API 將返回比以前更多的資料,比以前承受更大的負載。
如何確保我們的 API 能夠返回所有資料而不會出現延遲、伺服器端錯誤和過多請求等問題?這裡有一些效能提升的最佳實踐:
傳輸資料量大的時候,必然會導致 API 效能下降,而最直接的辦法就是降低 API 傳輸的負載(payload),我們可以使用 GZip 壓縮來縮小有效載荷的大小,可以在 Web API 上使用 Deflate compression。或者,我們可以將 Accept-Encoding 標題更新為 gzip。
快取是提高 API 效能的最簡單方法之一。如果我們的請求相同的 API,那麼該響應的快取版本有助於避免額外的服務呼叫或資料庫查詢。
在使用快取時,您需要選擇合適的快取淘汰演算法,在發生新資料更新時,快取也要及時更新。
即使是設計最強大的 API,緩慢的網路也會降低效能。不可靠的網路可能會導致停機,解決這個也相對簡單,多花錢投資於適當的網路基礎設施,這樣我們才能保持理想的效能水平。
此外,如果您有大量後臺程式,請在單獨的執行緒上執行這些程式,以避免阻止請求。還可以使用映象和 CDN在全球不同地區更快地服務請求。
API 可能會受到 DDoS 攻擊,該攻擊可能是惡意和故意的,也可能是工程師呼叫API在某些本地應用程式的迴圈中執行時故意的。可以通過測量交易並監控每個 IP 地址或每個SSO/JWT令牌的每秒呼叫次數,對惡意請求進行遮蔽來避免這種情況。
這種速率限制方法有助於減少對 API 的過度請求,並主動監控和識別可能的惡意活動。
工程師們普遍認為,PUT 和 PATCH 操作會產生相同的結果。他們在更新資源方面相似,但他們各自執行更新的方式不同:PUT 操作通過向整個資源傳送更新來更新資源。PATCH 操作僅對需要更新的資源應用部分更新。因此 PATCH 呼叫產生較小的負載,並大規模提高效能。
不過,即使 PATCH 呼叫可以限制請求大小,也應該注意它不是冪等的。PATCH 可以通過一系列多個呼叫產生不同的結果。因此,應該仔細和故意地考慮您的應用程式是否使用 PATCH 請求,並確保在需要時它們可以冪等地實現。如果沒有,請使用 PUT 請求。
如果你應該從這篇文章中學到一件事,那就是這個!日誌記錄、監控和警報是 API 最重要的組成部分,沒有之一。
擁有日誌、監控和警報有助於工程師在發生問題之前對其進行診斷和補救。許多API(基於Express/Node、Java、Go)都有預定義的介面來評估以下內容:
/health /metrics
如果沒有啟用日誌記錄,並且存在潛在問題,將無法跟蹤來源,或特定請求中出現問題的地點。如果沒有啟用監控,將無法從分析角度知道一些問題或錯誤的發生頻率。這將不利於做出合理的解決方案。而且,如果沒有啟用警報,將不知道是否有問題,直到客戶(或更糟糕的是客戶)報告它。這就比較嚴重了!
資料量大時,分頁是個很好的策略,不過分頁也不是銀彈,資料量大時依然會非常慢。一個有效的策略是最多顯示前 100 頁,幾乎沒有人會翻到 100 頁之後。
前後端分離已是常態,對於後端開發來說,最重要的就是設計一個強大的 API,針對 APi 的效能進行適當優化和增強,它可以非常強大,為企業和客戶提供出色的體驗。作為負責任的工程師,我們有責任決定如何以高效能的方式構建我們的 API,這可以幫助我們實現和超越我們的目標。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2848344/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GraphQL 碰撞 Apache APISIX,提升 API 領域的安全與效能ApacheAPI
- 2019年助你提升效率的 5 個日曆 APPAPP
- 邦芒職場:十大妙招助你職場步步為營,事業節節高升
- javascript效能提升之路JavaScript
- .NET MAUI 效能提升UI
- 介面效能提升方法
- Analyze table對Oracle效能的提升Oracle
- 如何提升JSON.stringify()的效能?JSON
- 如何提升JSON.stringify的效能?JSON
- 這 16 個 CSS 偽類,助你提升佈局效率!CSS
- 1個工具,助你提升K8S故障排查效率!K8S
- 818好物節,電商RPA助你提升運營效率
- 6個提升PostgreSQL效能的小技巧SQL
- 提升Python程式效能的小習慣!Python
- 關於研發效能提升的思考
- 如何提升前端基建的效能價值?前端
- 使用 preloadRouteComponents 提升 Nuxt 應用的效能UX
- 5個介面效能提升的通用技巧
- 如何提升Web前端效能?Web前端
- 推薦5款免費且無廣告的軟體,助你提升效率
- 提升50%!Presto如何提升Hudi表查詢效能?REST
- Sensei for Mac:提升Mac效能的終極利器Mac
- 怎麼去提升伺服器的效能?伺服器
- 好用的API彙總:提升開發效率的利器API
- 提升開發效率的免費API好物API
- 【Python】透過Cython提升效能Python
- win10卓越效能模式,提升電腦效能Win10模式
- 用 100 行程式碼提升 10 倍的效能行程
- Flutter 1.17 中的導航解密和效能提升Flutter解密
- 提升現代web app中的頁面效能WebAPP
- 淺談軟體效能提升相關的概念
- 企業怎麼提升伺服器的效能伺服器
- Azure Terraform(十三)提升 Azure Web App Plan 的效能ORMWebAPP
- Java 中的5個程式碼效能提升技巧,最高提升近10倍Java
- Golang pprof 效能調優實戰,效能提升 3 倍!Golang
- [譯] 使用 PhpFastCache 提升網站效能PHPAST網站
- 實踐指南-前端效能提升 270%前端
- Vue效能提升之Object.freeze()VueObject