🚀 LLM 流式 API 友好的 HttpClient - Fetcher v1.8.9 发布!
🚀 Fetcher
超轻量级 • 模块化 • TypeScript 优先 • 拦截器驱动 • LLM 流式 API 支持
Fetcher v1.8.9 发布:更强大的请求处理与开发者体验升级 🚀
我们很高兴发布 Fetcher v1.8.9!这个版本带来了众多令人兴奋的新特性、性能优化和开发者体验改进,让您的网络请求处理更加高效和灵活。
✨ 核心亮点
🎯 全新的 React Hooks
- useFetcher Hook: 全新的数据获取钩子,为 React 应用提供无缝的数据请求体验
- useKeyStorage Hook: 强大的 KeyStorage 状态管理钩子,支持并发模式优化
🔐 增强的安全能力
- 可配置资源归属拦截器: 灵活配置的请求拦截机制,增强API安全性
- JWT令牌管理增强: 支持早期过期周期处理,提升令牌安全性
- 令牌刷新锁定机制: 防止重复刷新,确保令牌管理的稳定性
🚀 性能优化
- 请求拦截性能提升: 优化拦截器处理流程,减少请求延迟
- 结果提取器重构: 简化的结果提取API,提升数据处理效率
- 并发模式支持: useKeyStorage 钩子针对并发模式进行了专门优化
📦 主要新特性
请求处理增强
- PartialBy 工具类型: 创建具有可选属性的新类型
- URL模板解析器: 支持 URI 和 Express 风格模板
- 自定义中止控制器: 更好的请求超时和取消控制
- 属性参数支持: 拦截器间通信更加灵活
存储系统升级
- 可监听存储接口: 全新的事件监听存储系统
- 跨环境存储支持: 统一浏览器和Node.js环境下的存储体验
- 增强的 KeyStorage: 改进的键值存储管理
查询功能强化
- 游标查询支持:
cursorQuery
函数添加 - 条件查询优化: AND/OR 条件创建器支持空条件
- 分页查询改进:
pagedQuery
工厂函数和选项对象配置
🐛 问题修复
- 确保 AbortController 正确分配给请求
- 修复 JWT 令牌处理中的空载荷情况
- 修正浏览器环境检测实现
- 处理 AND/OR/NOR 函数中的边界情况
📚 文档改进
- 更新 README 文档和拦截器命名
- 添加 Serializer 接口详细文档
- 完善 KeyStorage 类和选项接口文档
🚀 开始使用
立即升级到 v1.8.9,体验这些强大的新特性:
pnpm update @ahoo-wang/fetcher
🌟 为什么选择 Fetcher?
Fetcher 不仅仅是一个 HTTP 客户端——它是一个为现代 Web 开发设计的完整生态系统,原生支持 LLM 流式 API。基于原生 Fetch API 构建,Fetcher 提供了类似 Axios 的体验,同时保持极小的体积。
🚀 核心特性
🎯 @ahoo-wang/fetcher
- 基础核心
轻量级核心,驱动整个生态系统:
- ⚡ 超轻量级: 仅 3KiB min+gzip - 比大多数替代品更小
- 🧭 路径和查询参数: 内置支持路径 (
{id}
/:id
) 和查询参数 - 🔗 拦截器系统: 请求、响应和错误拦截器,支持有序执行的灵活中间件模式
- ⏱️ 超时控制: 可配置的请求超时和适当的错误处理
- 🔄 Fetch API 兼容: 完全兼容原生 Fetch API
- 🛡️ TypeScript 支持: 完整的 TypeScript 定义,实现类型安全开发
- 🧩 模块化架构: 轻量级核心和可选扩展包
- 📦 命名 Fetcher 支持: 自动注册和检索 fetcher 实例
- ⚙️ 默认 Fetcher: 预配置的默认 fetcher 实例,快速上手
🎨 @ahoo-wang/fetcher-decorator
- 声明式 API
使用简洁的声明式服务定义转换您的 API 交互:
- 🎨 清晰的 API 定义: 使用直观的装饰器定义 HTTP 服务
- 🧭 自动参数绑定: 路径、查询、头部和正文参数自动绑定
- ⏱️ 可配置超时: 每方法和每类的超时设置
- 🔗 Fetcher 集成: 与 Fetcher 的命名 fetcher 系统无缝集成
- ⚡ 自动实现: 方法自动实现 HTTP 调用
- 📦 元数据系统: 丰富的元数据支持,用于高级自定义
📡 @ahoo-wang/fetcher-eventstream
- 实时流和 LLM 支持
为您的实时应用提供 Server-Sent Events 支持,专为大型语言模型流式 API 设计:
- 📡 事件流转换:将
text/event-stream
响应转换为ServerSentEvent
对象的异步生成器 - 🔌 自动扩展:模块导入时自动扩展
Response
原型,添加事件流方法 - 📋 SSE 解析:根据规范解析服务器发送事件,包括数据、事件、ID 和重试字段
- 🔄 流支持:正确处理分块数据和多行事件
- 💬 注释处理:正确忽略注释行(以
:
开头的行) - 🛡️ TypeScript 支持:完整的 TypeScript 类型定义
- ⚡ 性能优化:高效的解析和流处理,适用于高性能应用
- 🤖 LLM 流准备就绪: 原生支持来自流行 LLM API(如 OpenAI GPT、Claude 等)的流式响应
LLM 集成示例
LlmClient 演示了如何创建具有流支持的 LLM API 专用客户端:
import { createLlmFetcher, LlmClient } from './llmClient';
// 使用您的 API 配置初始化 LLM 客户端
const llmFetcher = createLlmFetcher({
baseURL: 'https://api.openai.com/v1',
apiKey: process.env.OPENAI_API_KEY || 'your-api-key',
model: 'gpt-3.5-turbo',
});
const llmClient = new LlmClient();
// 流式聊天完成,逐个令牌输出
async function streamChatExample() {
const stream = await llmClient.streamChat({
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Explain quantum computing in simple terms.' },
],
stream: true,
});
for await (const event of stream) {
if (event.data) {
const chunk = event.data;
const content = chunk.choices[0]?.delta?.content || '';
process.stdout.write(content); // 实时输出
}
}
}
🧩 @ahoo-wang/fetcher-wow
- CQRS/DDD 框架支持
与 Wow CQRS/DDD 框架的一流集成:
- 📦 完整的 TypeScript 支持:为所有 Wow 框架实体提供完整的类型定义,包括命令、事件和查询
- 🚀 命令客户端:用于向 Wow 服务发送命令的高级客户端,支持同步和流式响应
- 🔍 强大的查询 DSL:丰富的查询条件构建器,支持全面的操作符用于复杂查询
- 📡 实时事件流:内置对服务器发送事件的支持,用于接收实时命令结果和数据更新
- 🔄 CQRS 模式实现:对命令查询责任分离架构模式的一流支持
- 🧱 DDD 基础构件:基本的领域驱动设计构建块,包括聚合、事件和值对象
- 🔍 查询客户端:专门用于查询快照和事件流数据的客户端,支持全面的查询操作:
- 资源计数
- 资源列表查询
- 以服务器发送事件形式流式传输资源
- 资源分页
- 单个资源检索
🔐 @ahoo-wang/fetcher-cosec
- 企业安全
使用集成认证保护您的应用:
- 🔐 自动认证: 自动 CoSec 认证头部
- 📱 设备管理: 使用 localStorage 持久化的设备 ID 管理
- 🔄 令牌刷新: 基于响应代码 (401) 的自动令牌刷新
- 🌈 请求跟踪: 用于跟踪的唯一请求 ID 生成
- 💾 令牌存储: 安全的令牌存储管理
📦 包生态系统
包 | 描述 | 版本 | 大小 |
---|---|---|---|
@ahoo-wang/fetcher |
核心 HTTP 客户端
具有 Axios 类似 API 的超轻量级基础 |
||
@ahoo-wang/fetcher-decorator |
装饰器支持
声明式 API 服务定义 |
||
@ahoo-wang/fetcher-eventstream |
实时流和 LLM 支持
Server-Sent Events (SSE) 支持,原生 LLM 流式 API 集成 |
||
@ahoo-wang/fetcher-wow |
CQRS/DDD 框架支持
与 Wow CQRS/DDD 框架的一流集成 |
||
@ahoo-wang/fetcher-cosec |
企业安全
CoSec 认证集成 |
🚀 快速开始
📦 安装
# 安装核心包
npm install @ahoo-wang/fetcher
# 或安装所有扩展,包括 LLM 流支持
npm install @ahoo-wang/fetcher @ahoo-wang/fetcher-decorator @ahoo-wang/fetcher-eventstream @ahoo-wang/fetcher-cosec
# 使用 pnpm (推荐)
pnpm add @ahoo-wang/fetcher
# 使用 yarn
yarn add @ahoo-wang/fetcher
⚡ 快速示例
基础 HTTP 客户端
import { Fetcher } from '@ahoo-wang/fetcher';
// 创建 fetcher 实例
const fetcher = new Fetcher({
baseURL: 'https://api.example.com',
timeout: 5000,
});
// 带路径和查询参数的 GET 请求
const response = await fetcher.get('/users/{id}', {
urlParams: {
path: { id: 123 },
query: { include: 'profile' },
},
});
const userData = await response.json<User>();
// 自动 JSON 转换的 POST 请求
const createUserResponse = await fetcher.post('/users', {
body: { name: 'John Doe', email: 'john@example.com' },
});
声明式 API 服务
import { NamedFetcher } from '@ahoo-wang/fetcher';
import {
api,
get,
post,
path,
query,
body,
} from '@ahoo-wang/fetcher-decorator';
// 注册命名 fetcher
const apiFetcher = new NamedFetcher('api', {
baseURL: 'https://api.example.com',
});
// 使用装饰器定义服务
@api('/users', { fetcher: 'api' })
class UserService {
@get('/')
getUsers(@query('limit') limit?: number): Promise<User[]> {
throw new Error('Auto-generated');
}
@post('/')
createUser(@body() user: User): Promise<User> {
throw new Error('Auto-generated');
}
@get('/{id}')
getUser(@path('id') id: number): Promise<User> {
throw new Error('Auto-generated');
}
}
// 使用服务
const userService = new UserService();
const users = await userService.getUsers(10);
强大的拦截器
import { Fetcher } from '@ahoo-wang/fetcher';
const fetcher = new Fetcher({ baseURL: 'https://api.example.com' });
// 添加带排序的请求拦截器
fetcher.interceptors.request.use({
name: 'auth-interceptor',
order: 100,
intercept(exchange) {
exchange.request.headers.Authorization = 'Bearer ' + getAuthToken();
},
});
// 添加响应拦截器用于日志记录
fetcher.interceptors.response.use({
name: 'logging-interceptor',
order: 10,
intercept(exchange) {
console.log('Response:', exchange.response.status);
},
});
实时流和 LLM 支持
import { Fetcher } from '@ahoo-wang/fetcher';
import { EventStreamInterceptor } from '@ahoo-wang/fetcher-eventstream';
const fetcher = new Fetcher({ baseURL: 'https://api.example.com' });
fetcher.interceptors.response.use(new EventStreamInterceptor());
// 流式实时事件 (通用 SSE)
const response = await fetcher.get('/events');
if (response.eventStream) {
for await (const event of response.eventStream()) {
console.log('Real-time event:', event);
}
}
// 流式 LLM 响应,逐个令牌输出
const llmResponse = await fetcher.post('/chat/completions', {
body: {
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: 'Hello!' }],
stream: true,
},
});
if (llmResponse.jsonEventStream) {
// 专门用于 LLM API 的 JSON SSE 事件
for await (const event of llmResponse.jsonEventStream<ChatCompletionChunk>()) {
const content = event.data.choices[0]?.delta?.content || '';
process.stdout.write(content); // 实时令牌输出
}
}
🎯 集成测试示例
在我们的 integration-test 目录中探索全面、可用于生产的实现:
🌐 HTTP 操作
- Typicode API 集成 - 与 JSONPlaceholder API 的完整集成,演示实际使用
- 参数处理 - 高级路径、查询和正文参数管理
- 错误处理 - 全面的错误处理模式
🔧 高级模式
- COSEC 认证 - 具有令牌管理的企业级安全集成
- 拦截器链 - 具有有序执行的复杂中间件模式
- 超时策略 - 自适应超时配置
📡 实时特性
- LLM 流式 API - 原生支持从大型语言模型流式响应
- Server-Sent Events - 实时通知和更新
- 流数据 - 具有自动重新连接的连续数据流
🎨 装饰器模式
- 声明式服务 - 使用 TypeScript 装饰器的清晰、可维护的 API 服务层
- 元数据扩展 - 用于高级用例的自定义元数据
- 类型安全 API - 完整的 TypeScript 集成和自动类型推断
🏗️ 开发和贡献
🛠️ 先决条件
- Node.js >= 16
- pnpm >= 8
🚀 开发命令
# 安装依赖
pnpm install
# 构建所有包
pnpm build
# 运行单元测试和覆盖率
pnpm test:unit
# 格式化代码
pnpm format
# 清理构建产物
pnpm clean
# 运行集成测试
#pnpm test:it
📦 版本管理
同时更新所有包:
pnpm update-version <new-version>
这会更新单体仓库中所有 package.json
文件的版本字段。
🤝 贡献
欢迎贡献!请查看我们的 贡献指南 获取详情:
- Fork 仓库
- 创建您的功能分支 (
git checkout -b feature/AmazingFeature
) - 提交您的更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 打开拉取请求
🧪 质量保证
- 代码覆盖率: 所有包保持在 95% 以上
- TypeScript: 启用严格类型检查
- 代码检查: 使用 Prettier 的 ESLint 保证一致的代码风格
- 测试: 全面的单元和集成测试
📄 许可证
本项目采用 Apache-2.0 许可证。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
🚀 效率革命!AI 低代码引擎发布 0.13.25 版本,设计师和开发者终于能说同一种
一键复制粘贴跨页面,17个快捷键让开发效率飙升50% 业内领先的开源AI低代码开发引擎VTJ.PRO再次带来重磅更新!最新发布的0.13.25版本中,编辑器正式支持快捷键操作和跨页面复制粘贴功能,这将彻底改变企业级应用开发的协作方式。 设计师的流畅感,开发者的高效率 想象一下:在使用Figma或Sketch设计时,那种行云流水的快捷键操作体验,现在终于在应用开发领域实现了! VTJ.PRO此次更新包含了17个精心设计的快捷键,覆盖了从基础操作到复杂交互的全场景: 全局操作快捷键让保存(⌘S)、预览(⌘P)、撤销(⌘Z)、重做(⇧⌘Z)等高频操作触手可及,不再需要频繁点击工具栏。 组件操作快捷键更是精妙:删除、复制、剪切、粘贴这些操作与常用设计软件保持一致,大大降低了学习成本。方向键选择组件的设计让精准选择变得异常简单。 最令人惊喜的是⇧↑/↓快捷键,允许开发者在同级组件中快速调整顺序,这在进行精细布局调整时尤其有用。 跨页面复制粘贴:打破界限的创新 此次更新中最具革命性的功能非跨页面复制粘贴莫属。 以往开发过程中,在不同页面间复用组件需要多次导出导入,或者重新编写代码。现在,只需简单的...
-
下一篇
Firefox 143.0 发布
Firefox 143.0 现已发布,具体更新内容如下: New 在 Windows 上,Firefox 现在支持将网站作为 Web 应用直接固定到任务栏来运行。可以直接从任务栏固定这些网站并将其作为简化窗口运行,而不会丢失对已安装附加组件的访问权限。此功能目前不适用于从 Microsoft Store 安装的 Firefox。 现在可以通过将标签页拖到标签栏起始位置处来固定它们,从而更容易让重要站点触手可及。 现在可以选择 Microsoft 的 Copilot 作为聊天机器人,在侧边栏中使用,无需离开主视图即可快速访问。 当网站请求摄像头访问权限时,现在可以在权限对话框中预览。此功能在多个摄像头之间切换时尤其有用。 Firefox 地址栏现在可以显示重要日期和事件。此功能支持显示美国、英国、德国、法国和意大利地区的节日事件(例如“母亲节”)。 Firefox 通过报告用户计算机的更多属性的常量值扩展了其指纹保护功能。 在隐私浏览模式下下载文件时,Firefox 现在会在会话结束后询问是否保留或删除该文件。可以在“设置”中调整此行为。 Firefox 现在支持 Windows UI ...
相关文章
文章评论
共有0条评论来说两句吧...