总结了一下 API 与 SDK 之间的区别和联系
API
API(英语:Application Programming Interface,应用程序接口)是对程序而言的,提供编程时的接口,即一系列模块化的类和函数,而无需访问源码,或理解内部工作机制的细节。
- 优点:开发成本低,对接比较简单,可以快速验证商业模式和用户体验。
- 缺点:会经过对接平台,厂商可以获取对接平台相关数据信息,不具保密性。
API 标准化
存在一些如何定义 API 的行业标准,比如 SOAP、REST、GraphQL 等。
SDK
SDK(英语:Software Development Kit, 软件开发工具包)是由第三方服务商提供的实现软件产品某项功能的工具包,包括功能(通过 API 访问)、相关库、文档、示例等。
- 优点:对接后的功能比较稳定,响应速度快,而且对接平台相关数据不会被获取。
- 缺点:需要开发的环节较多,开发工作量大,对接周期略长。
SDK 组成
- 接口文件和库文件
接口文件和库文件即 API ,将底层的代码进行封装保护,提供给用户一个调用底层代码的接口。 - 帮助文档
帮助文档用来解释接口文件和库文件的功能,以及介绍有关的开发工具、操作教程、常见问题等。 - 开发示例
开发示例包括 DEMO 展示,也包括源代码。 - 工具
工具是用来协助用户进行二次开发的,比如开发向导、API 搜索工具、软件打包工具、测试/分析工具等。
SDK 举例
- 使用 App 登录的时候可以选用微信、微博、QQ 等第三方进行登录,这实际上就是将你的 App 接入了第三方的登录 SDK;
- App 里面支持将内容分享到微信、微博、QQ 等第三方平台,这实际上就是将你的 App 接入了第三方的分享 SDK;
- 电商类 App 里面支持微信、支付宝、百度钱包等支付方式,这实际上就是将你的 App 接入了第三方的支付 SDK;
- SDK 可以自己配置或者下载第三方提供的,比如 百度的 AI 市场,提供语音识别、语音合成、文字识别、图像搜索、图像识别、图像效果增强、人体分析、人脸识别、内容审核、语言处理基础技术等 SDK 下载,开发时使用现成的 SDK,节省了研发时间。
- SDK 是帮助提供商向开发人员介绍自己的产品的利器,并能鼓励他们利用其平台或 OS 来创建应用,而这可以在一个集成开发环境中实时进行。所以,大多数 SDK 是免费使用的,开发人员只需下载就能立即开始编程。
挑选 SDK
一些 SDK 可能附有相关的规则或协议,必须同意并提交后才能使用,尤其是处于 Alpha 或 Beta 阶段的新产品,或者包含不对外公开(非开源)的算法的软件。SDK 也可能受许可协议约束,因此创建的软件有可能无法在不兼容的许可证下发布。
开发人员在挑选使用哪些 SDK 进行开发时应仔细考虑上述问题。例如:
- 使用专有许可证的 SDK 不适合用于开发开源软件。
- 具有通用公共许可证(GPL) 的 SDK 不能用于专有应用。
- 利用较宽松公共许可证书(LGPL) 处理含有专有代码元素的项目时,应遵循相关的警告。
区别和联系
- SDK 除了提供的完善的接口,还会提供相关的开发环境。而 API 需要在 SDK 环境下调用,大部分 SDK 都包含 API。比如,Java SDK(Java 开发工具包)包含了 API 程序库,编译器、运行时环境和其他杂项工具,而 Java API 只是 Java 的程序库部分。最简单的 SDK 版本可以是一个 API,其中包含一些与特定编程语言进行交互所需的文件。
- 很多公司都开放自己的 API,并为了用户调用方便,他们大多采用 SDK 文档方式打包。用户在调用时只需要下载该 SDK 文档,根据相应规范进行调用即可。这样就省去了重写函数去封装 http、https 等请求的工作。比如 百度 AI 文字识别平台文档。
- 举例,有一杯密封饮料,它的名字叫做“SDK”,饮料上插着吸管,吸管的名字叫“API”,把你叫做“XX系统”。如果你想喝到饮料(让系统拥有 SDK 中的功能),你必须通过 API 这根吸管来实现(通过 API 连接你的系统和 SDK 工具包)。所以 SDK=你想要的软件功能的软件包,API=SDK 上的接口。
实际开发过程中,如果只是简单功能调用,API 调用方便快捷;如果是复杂功能调用,SDK 功能齐全。