193

我试图向非开发人员解释 API 和 SDK 之间的区别。我需要解释为什么商业指纹软件供应商可能不会提供 SDK,尽管他们肯定使用过。

设备供应商和软件供应商都可以而且应该公开定义良好的 API。此 API 允许(写入)其他软件程序与供应商自己的软件组件或硬件设备进行互操作。

如果有人有更多想法可以清楚地解释这一点,我将非常感谢这些建议。我想强调,目标是向不懂开发人员术语的非程序员解释这些概念

具体来说,在指纹传感器与软件进行注册/验证的背景下,我试图解释它:

如果我是指纹设备/传感器制造商而不是编写软件业务,我可以更好地推销我的产品的方式是:

  1. 确保我的设备驱动程序可安装在各种操作系统上
  2. 定义并提供 API 供软件开发人员编写程序(例如,用于注册、验证)以“交谈”或使用我的设备
  3. 开发并提供 SDK(超越 API 的一步),让软件开发人员更轻松、更快捷地编写适用于我的设备的程序。SDK 可以提供帮助代码库、参考应用程序、文档等。
4

8 回答 8

231

小菜一碟:

  • API 是一个接口。这就像电话系统的规格或您家中的电线。只要知道如何接口,任何东西*都可以使用它。您甚至可以购买现成的软件来使用特定的 API,就像您可以购买现成的电话设备或插入您家中交流电线的设备一样。
  • SDK 是实现工具。它就像一个套件,允许**您构建定制的东西以连接到电话系统或电线。

*任何东西都可以使用 API。一些 API 具有要求许可证密钥、身份验证等的安全规定,这可能会禁止在特定情况下完全使用 API,但这只是因为特定的身份验证/授权步骤失败。任何提供正确凭据(如果需要)的软件都可以使用该 API。

**从技术上讲,如果 API 有详细记录,则您不需要 SDK 来构建您自己的软件来使用该 API。但是拥有 SDK 通常会使该过程变得更加容易。

于 2009-05-07T13:59:19.187 回答
62

API就像一些令人费解的游戏的积木,孩子们可以用它来连接不同形状的积木并构建他们能想到的东西。

另一方面,SDK是一个合适的工作室,所有的开发工具都可用,而不是预成型的构建块。在工作室中,您拥有实际的工具,并且您不仅限于积木,因此可以制作自己的积木,或者可以在没有任何积木的情况下创建一些东西。

没有 SDK 或 API的编码就像在没有车间的情况下从头开始制作一样 - 你甚至必须制作自己的工具

于 2013-03-07T11:44:56.163 回答
27

假设公司 C 提供产品 P 并且 P 以某种方式涉及软件。然后 C 可以向驱动 P 的软件系统的软件开发人员提供一个库/一组库。

该库/库是一个SDK。它是 P 系统的一部分。它是软件开发人员用来修改、配置、修复、改进 P 的软件部分的工具包。

如果 C 想将 P 的功能提供给其他公司/系统,它会使用API来实现。

这是 P 的接口。外部系统与 P 交互的一种方式。

如果您从实现的角度考虑,它们看起来会非常相似。尤其是现在互联网已经成为一个大型分布式操作系统。

但是,在目的上,它们实际上是截然不同的。

您使用 SDK 构建一些东西,然后使用 API 使用或消费一些东西。

于 2010-06-24T03:20:18.610 回答
14

应用程序编程接口是一组例程/数据结构/类,它指定与目标平台/软件(如 OS X、Android、项目管理应用程序、虚拟化软件等)交互的方式。

虽然软件开发工具包是 API/s 的包装器,但它使开发人员的工作变得容易。

例如,Android SDK 便于开发人员与整个 Android 平台进行交互,而平台本身是由通过 API 通信的复合软件组件构建的。

此外,有时会构建 SDK 以促进使用特定编程语言进行开发。例如,Selenium Web 驱动程序(内置于 Java)提供 API 来原生驱动任何浏览器,而capybara可以被认为是一个 SDK,方便 Ruby 开发人员使用 Selenium Web 驱动程序。但是,Selenium Web 驱动程序本身也是一个 SDK,因为它将与各种本机浏览器驱动程序的交互组合到一个包中。

于 2015-03-15T23:33:34.453 回答
9

我不确定这两个术语是否有任何官方定义。我理解 API 是一组记录在案的可编程库和支持源,例如头文件或 IDL 文件。SDK 通常包含 API,但通常会添加编译器、工具和示例。

于 2009-05-07T13:59:45.270 回答
8

API 是关于如何做某事的规范,一个接口,例如“铁轨相距 4 英尺,金属条宽 1 英寸” 现在您有了 API,您现在可以构建适合这些铁路的火车如果您想去任何地方,请跟踪。API 只是有关如何构建代码的信息,它不做任何事情。

SDK是一些已经担心规范的实际工具包。“这里有一列火车、一些煤和一个维修工。用它来从一个地方到另一个地方” 使用 SDK,您不必担心细节。SDK是实际的代码,它自己可以用来做一些事情,但是当然,火车不会自发启动,你仍然需要一个列车员来控制火车。

SDK 也有自己的 API。“如果你想给火车提供动力,把煤放进去”,“拉动蓝色的杠杆来移动火车。”,“如果火车开始表现得不好,打电话给维修工”等。

于 2016-12-12T18:22:31.033 回答
4

API =可用单词及其含义的字典(以及组合它们所需的语法)

SDK = 一个文字处理系统……适用于 2 岁的婴儿……根据想法写作

虽然你可以在几年后上学并成为你的语言的大师,但使用 SDK 将帮助你立即写出整个有意义的句子(请原谅,在这个例子中,作为一个婴儿你还没有得到学习任何其他语言至少要学习使用 SDK。)

于 2013-03-20T16:20:15.493 回答
2

怎么样...就像您想在家里安装家庭影院系统一样。使用 API 就像获取所有的电线、螺钉、钻头和零件。可能性是无穷无尽的(仅受您收到的作品的限制),但有时势不可挡。SDK 就像获得一个工具包。你仍然必须把它放在一起,但这更像是为宜家书架准备预裁片和说明书,而不是一盒螺丝。

于 2014-11-17T23:51:39.940 回答