这个项目能做什么
Ky是一个基于Fetch API构建的轻量级、优雅的JavaScript HTTP客户端。它面向现代浏览器、Node.js、Bun和Deno,以无依赖的小型包形式发布。可通过npm(`npm install ky`)安装,或从jsdelivr、unpkg和esm.sh等CDN加载;在Deno中可直接从URL导入。
与原生`fetch`相比,Ky提供了更简洁的API,包括方法快捷方式(`ky.get()`、`ky.post()`、`ky.put()`、`ky.patch()`、`ky.head()`、`ky.delete()`、`ky.query()`),将重定向后的非2xx状态码视为错误,并返回一个扩展了便捷body方法(`.json()`、`.text()`、`.formData()`、`.arrayBuffer()`、`.blob()`,以及运行时支持的`.bytes()`)的Response对象。`json`选项可序列化负载并设置Content-Type头,而`searchParams`则将查询参数合并到请求URL中。
请求可通过`baseUrl`或`prefix`配置以解析相对URL,设置每次尝试的`timeout`(默认10000毫秒)以及覆盖整个操作(包括重试)的可选`totalTimeout`,还有`maxResponseSize`用于限制解压后的响应体字节数。自动重试高度可配置:重试次数限制、适用的方法和状态码、带`backoffLimit`的指数退避、自定义`delay`函数、防止惊群效应的`jitter`、遵循`Retry-After`和速率限制时间头、`retryOnTimeout`,以及用于完全自定义重试决策的`shouldRetry`回调。
生命周期钩子(`init`、`beforeRequest`、`beforeRetry`、`beforeError`、`afterResponse`)允许在请求生命周期中修改选项、请求和响应——例如附加授权头、重写URL,或通过`beforeRequest`钩子返回Response来模拟响应。`ky.extend()`可创建具有自定义默认值的实例,适用于构建特定API的客户端。
TypeScript支持包括`.json()`上的泛型(默认`unknown`而非`any`),并且响应体可通过Zod等标准模式兼容验证器进行验证,验证失败时抛出`SchemaValidationError`。上传和下载进度支持也被列为优于原生fetch的优势之一。
评论
0 评分人数达到10人后显示
登录后参与讨论。