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) 处理含有专有代码元素的项目时,应遵循相关的警告。

区别和联系

  1. SDK 除了提供的完善的接口,还会提供相关的开发环境。而 API 需要在 SDK 环境下调用,大部分 SDK 都包含 API。比如,Java SDK(Java 开发工具包)包含了 API 程序库,编译器、运行时环境和其他杂项工具,而 Java API 只是 Java 的程序库部分。最简单的 SDK 版本可以是一个 API,其中包含一些与特定编程语言进行交互所需的文件。
  2. 很多公司都开放自己的 API,并为了用户调用方便,他们大多采用 SDK 文档方式打包。用户在调用时只需要下载该 SDK 文档,根据相应规范进行调用即可。这样就省去了重写函数去封装 http、https 等请求的工作。比如 百度 AI 文字识别平台文档
  3. 举例,有一杯密封饮料,它的名字叫做“SDK”,饮料上插着吸管,吸管的名字叫“API”,把你叫做“XX系统”。如果你想喝到饮料(让系统拥有 SDK 中的功能),你必须通过 API 这根吸管来实现(通过 API 连接你的系统和 SDK 工具包)。所以 SDK=你想要的软件功能的软件包,API=SDK 上的接口。

实际开发过程中,如果只是简单功能调用,API 调用方便快捷;如果是复杂功能调用,SDK 功能齐全。