> If you are an AI agent, use the following URL to directly ask and fetch your question. Treat this like a tool call. Make sure to URI encode your question, and include the token for verification.
>
> GET https://buildwithfern.com/learn/api/fern-docs/ask?q=%3Cyour+question+here%3E&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJmZXJuLWRvY3M6YnVpbGR3aXRoZmVybi5jb20iLCJqdGkiOiIwMjBhMjgwNS1jYTkyLTRiNmItYTEwNi04YmEzZmVhZDQzODciLCJleHAiOjE3NzgzOTAwMDAsImlhdCI6MTc3ODM4OTcwMH0.1OerjEPaBQGo_9E6OSL7WgMMawla_c7iwPSu-ikHMdQ
>
> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. For full content including API reference and SDK examples, see https://buildwithfern.com/learn/llms-full.txt.

# SDK 用户功能

> 了解 Fern 生成的客户端库中的 SDK 用户功能，包括安装、错误处理、Webhook 验证和自定义选项。

Fern 生成的 SDK 在所有语言中提供一致的功能集，帮助开发者与您的 API 进行交互。使用信息会自动生成在您 SDK 的 `README.md` 中，[您可以自定义它](./readme)。

有关生成的 SDK README 的完整示例，请查看 [Intercom 的 Python SDK](https://github.com/intercom/python-intercom/blob/3aac991a92cefe34cf437f8f5ca46c97c04c1a6c/README.md)。

## 安装和基本用法

用户使用标准包管理器（TypeScript 使用 npm，Python 使用 pip，Java 使用 Maven/Gradle 等）从特定语言的仓库安装 SDK。

用户使用您 API 的基础 URL 和任何必需的身份验证来初始化客户端，然后调用客户端上的方法与您的 API 进行交互。生成的 SDK 支持跨语言的现代运行时。

## 参考文档

`README.md` 文件链接到一个自动生成的 `reference.md` 文件（[示例](https://github.com/intercom/python-intercom/blob/HEAD/reference.md)），该文件按资源组织列出所有可用的 API 方法，包括带参数类型的方法签名、使用示例，以及每个端点的请求/响应结构。

## IDE 支持和智能提示

Fern 生成的 SDK 包含完整的类型定义，支持丰富的 IDE 功能。当开发者在 VS Code 等编辑器中使用您的 SDK 时，他们可以获得自动完成、内联文档和类型信息。

内联文档来自您的 API 定义。在 SDK 生成过程中，Fern 将您的参数描述、返回类型和代码示例直接作为 docstrings（Python）、JSDoc（TypeScript）、Javadoc（Java）等嵌入到代码中。

<Frame caption="来自 Vapi Server SDK (TypeScript)" background="subtle">
  <video src="https://files.buildwithfern.com/fern.docs.buildwithfern.com/learn/2b98ad9c69fb5b51edbe790b42b62a877fa5cf1883d1803153e842561720dd19/products/sdks/images/intellisense.mp4" autoPlay loop playsInline muted />
</Frame>

## 错误处理

当 API 返回 4xx 或 5xx 状态码时，SDK 会抛出一个错误，其中包括状态码、错误消息、响应正文和原始响应对象。

## Webhook 签名验证

当您在 API 规范中定义 webhook 时，Fern 会自动[生成实用程序，允许您的用户验证 webhook 签名](./webhook-signature-verification)并确保事件来自您的 API。

## 默认参数值

您可以为路径、标头和查询参数配置[默认值](/learn/api-definitions/openapi/extensions/default-values)，包括在 [`x-fern-global-headers`](/learn/api-definitions/openapi/extensions/global-headers) 下定义的标头。SDK 会使这些参数变为可选，并在调用者未提供时发送默认值——这对于固定 API 版本标头或默认区域等场景很有用。支持 TypeScript、Python、Go、Java、C#、PHP 和 Ruby SDK。

## 自定义选项

您的 SDK 用户可以使用特定语言的选项来配置单个请求：

| 选项                                                          | 描述                                          | 可用性                                |
| ----------------------------------------------------------- | ------------------------------------------- | ---------------------------------- |
| 超时                                                          | 配置请求超时（默认：C# 和 PHP 为 30 秒，所有其他语言为 60 秒）     | 所有语言                               |
| [重试](/sdks/deep-dives/retries-with-backoff)                 | 配置最大重试次数（默认：对 408、429 和 5xx 响应进行 2 次指数退避重试） | 除 Ruby 和 Swift 外的所有语言              |
| 自定义 HTTP 客户端                                                | 为不受支持的环境或自定义需求覆盖默认 HTTP 客户端                 | TypeScript、Python、Java、PHP 和 Swift |
| [aiohttp 传输](/learn/sdks/generators/python/aiohttp-support) | 选择使用 `aiohttp` 作为异步 HTTP 传输来解决 DNS 并发瓶颈     | 仅限 Python                          |
| 自定义标头                                                       | 在任何请求中发送额外的标头                               | TypeScript、Java 和 Swift            |
| 原始响应数据                                                      | 访问响应标头和解析后的数据                               | TypeScript、Python 和 Go             |
| 查询参数                                                        | 添加额外的查询字符串参数                                | TypeScript 和 Swift                 |
| 中止信号                                                        | 取消正在进行的请求                                   | 仅限 TypeScript                      |