> This page is for SDK.

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 0.30.2

**`(fix):`** 修复带查询参数的字节端点的动态代码片段生成，
使用请求结构体而非位置参数。

## 0.30.1

**`(fix):`** 为带查询参数的字节（八位流）端点生成请求结构体，
用单个结构体替换位置参数，该结构体使用构建器模式
捆绑原始正文和所有查询参数。

## 0.30.0

**`(feat):`** 全面改进 WebSocket 重连：带抖动的指数退避算法，稳定连接 5 秒后
自动重置重试计数器，以及重连期间的消息队列（文本和二进制消息
被缓冲并在重连后刷新，而非报错）。

**`(feat):`** 在 `WebSocketMessage::Close` 中添加 `DisconnectInfo` 结构体，暴露服务器的
关闭代码和原因字符串。`recv()` 现在在关闭帧时返回 `None` 以
发送流结束信号。

**`(feat):`** 为带查询参数的 WebSocket 通道生成类型化的 `ConnectOptions` 结构体，
用支持 `..Default::default()` 人机工学的 `#[derive(Default)]` 结构体
替换位置 `&str` 参数。底层使用 `QueryBuilder`，匹配 HTTP 端点模式。

**`(feat):`** 支持从 IR 自定义连接和消息方法名称
（`channel.connectMethodName`、`msg.methodName`），分别回退到 `connect`
和 `send_{name}`。

**`(feat):`** 添加 `generateWebSocketClients` 配置别名，与 `enableWebsockets` 并存，
匹配 TypeScript/Python/Java 生成器配置键。

**`(feat):`** 在多 URL API 中将每个 WebSocket 连接器路由到正确的环境 URL 方法
（例如，Deepgram 的 `wss://agent.deepgram.com` 与
`wss://api.deepgram.com`）。

**`(feat):`** 在生成的 `ServerMessage` 枚举中添加 `Unknown(serde_json::Value)` 兜底变量，
用于向前兼容新的服务器消息类型。

**`(feat):`** 优雅的 WebSocket 关闭：发送关闭帧并等待最多 5 秒的
服务器响应，带双重关闭保护。

**`(fix):`** 将隐式认证参数从必需的 `&str` 更改为 `Option<&str>`，
仅在提供令牌时有条件地注入 Authorization 标头。

**`(fix):`** 修复带显式 Authorization 标头的 API（例如 Deepgram）的连接器认证转发
— 连接器现在正确解包 `Option` 以匹配客户端的 `&str` 参数类型。

**`(fix):`** 修复仅 JSON 通道上的 `recv()` 在遇到意外二进制帧时返回带帧大小的错误，
而不是静默跳过它们。

**`(chore):`** 从通道路径而非通道 ID 派生通道名称，将版本段移动到后缀位置
（例如，`/v1/agent/converse` → `AgentConverseV1Client`）。

**`(fix):`** 在 `ServerMessage` 枚举上用自定义的 `Deserialize` 实现替换 `#[serde(untagged)]` 派生，
使用往返评分。修复结构体字段上的 `#[serde(default)]` 导致
每个变量都匹配、总是返回第一个的静默不匹配问题。

**`(chore):`** 引入 `ReconnectContext` 结构体来组织重连状态，
在 `read_loop` 和 `try_reconnect` 中替换 8 个单独的 `Arc` 包装参数。

**`(fix):`** 修复 `try_reconnect` 以指数退避重试至 `max_reconnect_attempts`，
而非在单次失败尝试后放弃。

**`(fix):`** 修复 `flush_queues` 在发送失败时通过发送前克隆并在错误时
推回队列前端来保留消息。

**`(chore):`** 从 WebSocket 客户端基础设施中移除无用的 `parse_websocket_message` 函数和
未使用的 `serde::de::DeserializeOwned` 导入。

**`(fix):`** 修复线路测试生成器为多 URL API 设置 `config.environment = None`，
使请求路由到 WireMock 服务器而非真实 API 端点。

**`(fix):`** 修复 `number_serializers` 单元测试断言使用 `1e+20` 匹配 Rust 的
serde\_json 指数格式化。

**`(fix):`** 修复 WebSocket 连接器以支持 `api_key` 认证和 bearer
令牌。连接器现在从根客户端接收预计算的 Authorization 标头值，
使用 IR 的 api 键前缀（例如 `Token`），`api_key` 优先于 `token`，匹配 HTTP 客户端行为。

### What's new

* 对于之前将查询参数作为位置参数传递给 `connect()` 的代码，这是一个破坏性变更。

## 0.29.0

**`(feat):`** 为多 URL 环境添加每个端点的 URL 解析。每个端点
现在在调用时从环境对象解析其基础 URL，匹配
Python 和 Java SDK 方法。

**`(feat):`** 从代码而非静态模板生成 `ApiClientBuilder`，为多 URL API 启用
环境感知的构建器方法。

**`(feat):`** 为多 URL 环境在 `Environment` 枚举上添加每个基础 URL 的获取器方法
（例如，`api_url()`、`agent_url()`）。

**`(feat):`** 为多 URL 环境在 `ClientConfig` 中添加 `Option<Environment>` 字段，
以支持每个端点的 URL 解析。

**`(feat):`** 在 `HttpClient` 中添加 `base_url()`、`config()`、`execute_request_with_base_url()` 和
`execute_stream_request_with_base_url()` 访问器，用于
多 URL 端点解析。

**`(chore):`** 从 `RootClientGenerator` 中移除构造时 URL 覆盖；所有
子客户端现在统一接收 `config.clone()`。

## 0.28.0

**`(feat):`** 添加 `number_serializers` 模块，将整数 `f64` 值序列化为
不带尾随 `.0` 的格式（例如，`24000.0` 序列化为 `24000`）。某些 API
拒绝整数值的小数表示。包含范围验证以防止
`i64` 范围外数字的错误值。

**`(feat):`** 为带 `application/octet-stream` 请求正文的端点添加 `execute_bytes_request`
HTTP 客户端方法，发送原始字节而非 JSON 编码。

**`(feat):`** 支持来自 IR 认证方案的 API 键前缀。当配置了 `Token`
或 `Bearer` 等前缀时，生成的 HTTP 客户端会将其
添加到 API 键标头值前。

**`(fix):`** 重构文件上传和内联请求正文上的查询参数，作为 URL 查询字符串发送
而非序列化到请求正文中。查询参数字段现在标记为 `#[serde(skip_serializing)]`。

**`(fix):`** 修复可选查询参数字段上冗余的 `#[serde(skip_serializing_if = "Option::is_none")]` 和
`#[serde(skip_serializing)]`。现在仅发出 `skip_serializing`。

**`(chore):`** 仅在 IR 使用浮点/双精度类型时有条件地包含 `number_serializers.rs`，
与其他序列化器模块保持一致。

**`(chore):`** 在认证方案上用适当的 `FernIr.AuthScheme._visit()` 模式匹配
替换不安全的类型转换。

**`(chore):`** 将 IR SDK 从 v61 升级到 v65。