js生态的http请求库
js 生态的 http 请求库可以分为前端和后端。本文从我的角度介绍几个用过的库。
远古时代
最早接触到的 http 请求库肯定是前端的的jQuery,它封装了AJAX 技术的XMLHttpRequest对象,$.ajax陪伴了无数前端开发者。
node.js 诞生
后端生态由node.js于 2009 年一手创建。node.js 内建了http模块,可以用来创建 http 服务器和客户端。但 http 太底层,使用起来不够方便,所以有了各种请求库。
我最早接触的后端 http 请求库是已经停止维护的request。它作为 node 生态中最早的一批库,与 node.js 一同发展。随着 js 生态的发展,很多生态中的功能被吸收为标准,request
的设计已经过时,于 2019 年宣布停止维护。
生态大爆发
在 2009 年左右,node.js、html5 等技术的出现,刚好贴合移动互联网的需求。互相促进下,停滞不前的 js 生态进入了寒武纪生态大爆发。
这期间百家争鸣,出现了很多request
的竞争者,比如needle、superagent、got等。
Promise
2015 年,众盼已久的 es6/es2015 发布,它带来了很多新特性,其中最重磅的特性之一是Promise。Promise 解决了回调地狱的问题,使得异步编程更加优雅。
在此之后,如果一定要选出一个 http 请求库的王者,那它一定是axios。axios 基于 Promise 开发,同时支持浏览器和 node.js。
Fetch
虽然和 Promise 一起发布的标准还有Fetch API,但传导到浏览器,再传导到用户还需要时间。
node.js 也花了很长的时间,直到 2022 年发布的v17.5.0 才支持了 Fetch API。
后起之秀的 js runtime,比如deno和bun,也在早期就支持了 Fetch API。
在这期间,出现了很多围绕 fetch 做 polyfill 的库,比如:node-fetch、isomorphic-fetch。
基于 Fetch 又有了新一代的请求库,比如:
基本上,Fetch API 已经成为了 js 生态的新标准。
我个人的选择是,node 端用 undici,浏览器端简单需求就用 fetch,复杂需求用 axios 或 ky。
结语
js 生态的发展速度之快,让人眼花缭乱。本文只是出于我个人的角度,不准确也不全面。如果你有更好的建议,欢迎留言。