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