Node.js 已合併 Fetch API

2022-03-08 09:00:18

根據 Node.js 的釋出記錄,上個月其核心開發團隊合併了。

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 本身。

展開閱讀全文