Node.js 已合并 Fetch API
根據 Node.js 的發布記錄,上個月其核心開發團隊合并了為 Node.js 添加 Fetch API 的 PR。
Fetch API 提供了 WHATWG 標準接口獲取資源,這是一個基于 Promise 的 HTTP 客戶端,可以用來簡化 HTTP 請求,在瀏覽器環境已支持,瀏覽器環境的兼容性實現參考 Web/API/fetch,使用方式與瀏覽器中使用 Fetch API 一致。
Fetch API 主要包含以下四個接口:
- fetch():該方法是最常用的,用于發送請求。
- Headers:相當于 response/request 的頭信息,可以使你查詢到這些頭信息,或者針對不同的結果做不同的操作。
- Request:相當于一個資源請求。
- Response:相當于請求的響應。
對于 Node.js 來說,這是一項十分重要的特性。下面介紹一下 Fetch API 是如何產生的,以及這項新增的功能對 Node.js 開發者意味著什么?
在 Web 誕生的早期階段,跨站點執行異步請求十分不方便,開發者需要使用笨拙的方法在多個網絡之間進行交互。
1998 年,隨著 Internet Explorer 5 引入XMLHttpRequest,這一狀況得以改變。它是一個旨在克服這種限制的 API。最初,XMLHttpRequest被設計用來通過 HTTP 獲取 XML 數據,因此被命名為XMLHttpRequest。此后逐漸添加了對其他數據格式的支持,主要是 JSON、HTML 和純文本。
XMLHttpRequestAPI 在當時提供了極大的幫助,但隨著網絡的發展,它也變得難以操作,以至于 JavaScript 框架,特別是 jQuery,不得不對其進行抽象,以使實現更容易,以及成功/錯誤處理更順暢。
2015 年,Fetch API 作為XMLHttpRequest的現代繼任者被推出,隨后它成為 Web 應用中進行異步調用的事實標準。與XMLHttpRequest相比,Fetch 的一個顯著優勢是它使用了 Promise 特性,提供了一個更簡單、更干凈的 API,同時避免了回調地獄。
盡管 Fetch API 已經誕生了一段時間,但由于一些限制,它還沒有被納入 Node.js 核心。在 Hacker News 上一個由 Node.js 核心貢獻者回答的問題中,有人指出,瀏覽器的 Fetch API 實現依賴于基于瀏覽器的 Web Streams API 和AbortController接口(用于中止獲取請求),直到最近 Node.js 才有這個接口。因此,很難決定將其納入 Node.js 核心的最佳方法。
在添加 Fetch API 之前,請求模塊 (request module) 是 Node.js 中最流行的 HTTP 請求方法。但整個 JavaScript 生態迅速發展,新引入的模式使 request 過時了。這里的一個關鍵例子是 async/await,request API 中沒有這方面的規定,由于這些限制,該項目后來被廢棄。
總的來說,Fetch API 進入 Node.js 核心對開發者來說是一件好事。不過 Fetch API 在 Node.js 中完全穩定可能需要一段時間(大約一兩年),因為要使其符合標準還有很多工作要做。此外,許多有趣的更新也將在不久的將來發生,其中之一包括向 Undici 添加 HTTP/2 支持,并最終支持 Fetch API 本身。
本文轉自OSCHINA
本文標題:Node.js 已合并 Fetch API
本文地址:https://www.oschina.net/news/185476/fetch-api-node-js