什么是 SDK?软件开发工具包简单解读
SDK(软件开发工具包)是一套现成的工具包,公司将其提供给开发者,使他们无需从零开始构建一切,就能使用其服务或平台。它通常包括针对特定编程语言的代码库、文档和示例,有时还包括测试工具等额外工具。当你的应用“使用 Stripe SDK”时,意味着你的代码调用的是 Stripe 预先构建好的函数,而不是手动编写每一个发给 Stripe API 的请求。
用 AI 构建应用时,为什么 SDK 很重要
当你请 AI 构建工具添加支付、AI 聊天、地图或邮件功能时,它通常会安装该服务商的 SDK,并编写几行代码来调用它。了解 SDK 是什么,能帮你:
- 理解项目中新增了什么。 SDK 是一种依赖项,也就是你的应用现在依赖的外部代码。
- 识别它需要的配置。 几乎每个 SDK 都需要 API 密钥,而且许多 SDK 分为“服务端”和“浏览器端”两个版本,对哪些密钥可以安全使用有不同的规定。
- 提出准确的要求。 “在服务端使用 Stripe 官方 SDK”比“添加 Stripe”是更清晰的指令。
- 读懂错误信息。 AI 构建的应用中,很多错误都源于 SDK 配置有误、版本过旧或使用位置不当。
一个日常类比
想象你要装一个置物架。
- API 就像建筑的规则:哪些墙面可以打螺丝、能承受多大的重量、管线在哪里。你可以只依据这些规则动手,自己测量、钻孔。
- SDK 则像同一家公司为这面墙配套提供的平板组装套件:预先切割好的零件、合适的螺丝、一个严丝合缝地适配这面墙的支架,以及一本说明书。
置物架放在哪里、上面放什么,仍由你决定。套件只是帮你省去切割木料和猜测螺丝尺寸的麻烦,也不太可能让你不小心钻穿水管。
SDK、API、库与框架的区别
这些术语彼此重叠,让很多人感到困惑:
| 术语 | 是什么 | 示例 |
|---|---|---|
| API | 与某项服务通信的规则:它接受哪些请求、返回什么 | Stripe 的 REST API,地址为 api.stripe.com |
| SDK | 服务商提供的工具包,用于从特定语言使用其 API 或平台,附带文档和工具 | Stripe 官方的 Node.js 库 |
| 库(Library) | 任何可复用、添加到项目中的代码 | 一个日期格式化软件包 |
| 框架(Framework) | 你的整个应用所构建的更大结构 | React、Next.js、Django |
SDK 通常包含一个库,而该库通常调用一个 API。对于网络服务来说,“SDK”和“客户端库”常常可以互换使用。
有些 SDK 与网络服务无关。苹果和谷歌发布的 SDK 用于构建 iOS 和 Android 应用,其中包括编译器、模拟器和平台代码。原理相同:把为其平台开发所需的一切都放在同一个工具包里。
SDK 为你做了什么
下面以同一个任务为例——在支付服务商处创建一位客户——对比两种做法。
不使用 SDK 时,你的代码必须自己构建 HTTP 请求:设置 URL,把密钥放进正确的请求头,按 API 要求的格式组织数据,发送请求,检查状态码,解析响应,并在网络波动时处理重试。
使用 SDK 时,代码接近这一行:
const customer = await stripe.customers.create({ email: "lena@example.com" });
在这一行代码背后,SDK 会处理:
- 身份验证——在每个请求中正确附加你的密钥
- 数据格式化——将你的数据转换为 API 所要求的格式,并把响应转换回对象
- 错误处理——把状态码转换为清晰的错误类型,便于你的代码捕获
- 重试——当请求因临时原因失败时安全地再次尝试(许多官方 SDK 都会这样做)
- 类型——在 TypeScript 中,告诉你的编辑器有哪些字段,使错误在运行代码之前就能被发现
实例演示:为客服应用添加 AI 回复
你请 AI 构建工具:“当客户提交客服工单时,使用 AI 模型生成一条建议回复。”
- AI 将模型服务商的官方 SDK 作为软件包安装到你的项目中(在 JavaScript 项目中,从 npm 仓库安装)。
- 你把服务商的 API 密钥添加为项目机密。SDK 会在服务端从环境变量中读取它。
- AI 编写一个服务端路由,使用工单内容和一段简短指令调用 SDK,并把建议回复保存到数据库中。
- 浏览器永远看不到密钥,它只调用你自己的服务端路由。
如果服务商之后更改了 API,通常会发布新版本的 SDK。更新软件包——并检查发行说明中是否有破坏性变更——往往就足够了。
关键术语
| 术语 | 含义 |
|---|---|
| 依赖项(Dependency) | 你的项目所依赖的外部代码。SDK 就是其中一种。 |
| 软件包 / 包管理器(Package / package manager) | 可下载的代码包,以及用来安装它的工具(JavaScript 用 npm,Python 用 pip)。 |
| 客户端库(Client library) | 让调用某个 API 更容易的代码。对于网络服务而言,它往往就是“SDK”的含义。 |
| 服务端 SDK(Server-side SDK) | 在你的后端运行,可以安全地使用机密密钥。 |
| 客户端 / 浏览器 SDK(Client-side / browser SDK) | 在用户的浏览器中运行。只应提供公开或“可发布”的密钥。 |
| 版本(Version) | 每个 SDK 发布版本都有编号(如 4.2.0)。版本号大幅跳跃通常意味着存在破坏性变更。 |
| 破坏性变更(Breaking change) | 需要你修改代码才能适配的更新。 |
| 更新日志 / 发行说明(Changelog / release notes) | 服务商列出的每个版本的变更内容。 |
常见误解
- “SDK 和 API 是同一回事。” API 是服务的接口,SDK 是建立在它之上的便捷层。大多数网络 API 不用 SDK 也能调用,只是工作量更大。
- “装好 SDK,集成就完成了。” 你仍然需要在服务商处拥有账户、正确的密钥,以及能处理各种失败情况的代码。
- “名称正确的软件包就是官方版本。” 攻击者有时会发布名称相似的仿冒软件包。请在服务商文档中核对确切的软件包名称。
- “浏览器 SDK 可以使用我的机密密钥。” 绝对不行。浏览器代码中的任何内容都对访问者可见。机密密钥只能放在服务端代码中——参见如何安全保管 API 密钥。
- “SDK 永远不需要更新。” 旧版本会停止接收修复,并且在服务商停用旧 API 版本后最终会失效。
向你的 AI 构建工具提出的要求
- “使用服务商的官方 SDK,而不是第三方封装。告诉我你安装的确切软件包名称和版本。”
- “只在服务端使用 SDK,并从环境变量中读取密钥。”
- “这个 SDK 的哪些部分在浏览器中运行?它们使用哪些密钥?”
- “如果 SDK 调用失败或超时,会发生什么?向用户显示清晰的提示,并记录错误。”
- “列出此应用依赖的每一个 SDK 和软件包,以及各自的用途。”
- “检查我们使用的 SDK 是否过期,或存在已知的安全问题。”
Mythex 中的 SDK
Mythex 智能体可以使用你技术栈对应的常规包管理器,在项目沙箱中安装软件包,包括各服务商的 SDK——只需说明软件包名称以及你希望它实现的功能。请参阅使用 npm 软件包。Mythex 并不为你的应用提供预先构建好的集成目录:你需要把服务商的密钥保存为项目机密,并请智能体从服务端调用该服务,具体方法见集成任意 API。
想了解 SDK 底层的内容,请阅读什么是 API。关于两个基于 SDK 的常见功能,请参阅如何为应用添加支付和如何使用 LLM API。
常见问题
用简单的话说,什么是 SDK?
SDK(软件开发工具包)是一组现成的代码、文档和工具,由公司提供,方便开发者使用其服务或平台。你无需手动编写每一个 API 请求,只需调用 SDK 已经提供的简单函数即可。
SDK 和 API 有什么区别?
API 是与某项服务通信的一套规则,包括它接受的请求和返回的响应。SDK 则是建立在 API 之上的工具包,通常面向某一种编程语言,它替你发出这些请求,并处理身份验证、重试和数据格式等细节。
SDK 是免费的吗?
大多数用于网络服务的 SDK 都可以免费下载,并且是开源的,但它所连接的服务可能会按使用量收费。使用 Stripe 或 OpenAI 的 SDK 本身不收费;它发出的支付或 AI 请求则由服务商计费。
使用 SDK 安全吗?
通常,服务商官方提供的 SDK 是调用其服务最安全的方式,因为它们有人持续维护,并负责处理安全细节。请从官方软件包仓库安装,保持更新,并小心那些名称相似的非官方软件包。