原文作者:Chidume Nnamdi
譯者:UC 國際研發 Jothy
寫在最前:歡迎你來到“UC國際技術”公眾號,我們將為大家提供與客戶端、服務端、演算法、測試、資料、前端等相關的高質量技術文章,不限於原創與翻譯。
Web 開發中客戶端與伺服器間的互動非常重要,它有利於客戶端應用高度動態化。使用者通過單擊按鈕的互動方式向伺服器傳送請求,伺服器檢索資料並返回,頁面無需重新載入,直接使用返回的資料重新渲染其部分/整體內容,或者對資料進行操作。
這其中的技術原理是 AJAX,通過 XMLHttpRequest 例項實現。 為了提升 AJAX 及 XMLHttpRequest 的使用體驗,社群開發了一些無需處理 AJAX 和 XMLHttpRequest 就直接發出 HTTP 請求的庫。
本文將帶你研究 5 個最流行的 HTTP 庫,瞭解它們是如何實現的。 希望能幫你省下一些時間。
提示:通過與 Bit 共享同步公共元件可以避免程式碼重複。 把相同的功能的程式碼變成共享元件,就可以隨處使用它了,構建更快喲~趕緊試試看。
Axios
基於 Promise 的 HTTP 客戶端,可用於瀏覽器和 Node.js
Axios 是一個基於 Promise 的 HTTP 庫,可用在 Node.js 和瀏覽器上發起 HTTP 請求,支援所有現代瀏覽器,甚至包括 IE8+!
優點
同時支援 Node.js 和瀏覽器
支援 Promise API
可以配置或取消請求
可以設定響應超時
支援防止跨站點請求偽造(XSRF)攻擊
可以攔截未執行的請求或響應
支援顯示上傳進度
廣泛用於 React 和 Vue 專案
缺點
用起來比較麻煩
Superagent
改良版 Ajax——與 Node.js HTTP 客戶端搭配使用
Superagent 是一個基於 Promise 的輕量級漸進式 AJAX API,非常適合傳送 HTTP 請求以及接收伺服器響應。 與 Axios 相同,它既適用於 Node,也適用於所有現代瀏覽器。
用 Superagent 發起 HTTP 請求就像在 request 物件上呼叫方法一樣簡單:
優點
它有一個外掛生態,通過構建外掛可以實現更多功能
可配置
HTTP 請求傳送介面友好
可以為請求鏈式新增方法
適用於瀏覽器和 Node
支援顯示上傳和下載進度
支援分塊傳輸編碼
支援舊風格的回撥
繁榮的外掛生態,支援眾多常見功能
缺點
其 API 不符合任何標準
Request
?? 簡化版 HTTP 請求客戶端
Request 提供了一種簡化的 HTTP 請求方式。 你可以使用比其他 HTTP 庫更少的程式碼來發起 HTTP 請求。 它不是基於 Promise 的,但如果你需要 Promise,你可以引入request-promise
庫,將請求封裝為 Promise 並返回。
優點
API 簡單易用
缺點
不基於 Promise
Fetch
優點
靈活易用
使用 Promise 避免回撥地獄
支援所有現代瀏覽器
遵循 request-response 方案
語法簡單清晰
支援 React Native
缺點
不支援伺服器端使用
缺乏開發庫的亮點功能,比如取消請求
沒有內建預設值,如請求模式,請求頭,請求憑據。
Supertest
Superagent 驅動,有一套流暢的 API 用於測試 Node.js HTTP 伺服器
Supertest 用於測試 Node.js HTTP 伺服器。 該庫由 SuperAgent 提供支援,它把自身的 API 和 SuperAgent 的底層 API 相結合,提供簡潔的 HTTP 測試介面。
優點
流暢的 API
簡單的 HTTP 斷言
可以與 Chai.js 和 Mocha 等不同的測試套件混用
缺點
不支援瀏覽器
總結
分析完熱門 HTTP 庫,你可能會問“我應該選擇哪一個?”
我想說,選擇哪個庫取決於你的專案、規模和目標使用者,每個選擇都有好有壞。 如果你為誤判規格選擇了錯誤的庫,那就得考慮下這個問題,重新選擇合適的工具。
如果你有任何疑問或覺得有需要補充、更正或刪除的,任何疑問都請隨時發表評論,發郵件或直接私信我。 謝謝閱讀!?
原文地址:https://blog.bitsrc.io/comparing-http-request-libraries-for-2019-7bedb1089c83?gi=89b097d4bfd1
好文推薦:
JavaScript 極致效能追求:TC39 二進位制 AST 提案
“UC國際技術”致力於與你共享高質量的技術文章
歡迎關注我們的公眾號、將文章分享給你的好友