API和SDK之间的区别


187

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

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

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

具体来说,在指纹传感器与软件进行注册/验证的情况下,以下是我尝试解释的方法:

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

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

Answers:


225

小菜一碟:

  • API是接口。就像电话系统的规格或房屋中的电线一样。只要知道如何进行接口,任何人都可以使用它。您甚至可以购买现成的软件来使用特定的API,就像您可以购买现成的电话设备或插入房屋中交流线路的设备一样。
  • SDK是实现工具。这就像一个工具包,可让您**自定义某些内容以连接到电话系统或电线。

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

**从技术上讲,如果API有充分的文档说明,则不需要SDK即可构建自己的软件来使用该API。但是拥有SDK通常会使该过程更加容易。


2
我要说明的其他一些想法是iPhone示例(专有代码,但API定义明确),电话插孔或USB端口示例,以解释软件接口是什么,并且更容易从视觉上理解硬件类比
Sliceoftime,2009年

17
继续这个很好的解释,例如,API可以是http / REST API,而SDK可以是HttpClient之上的库,以使其更快,更轻松地与REST Web服务进行交互。
frandevel

4
更简单地说,API是接口。SDK是接口上的抽象层。
tvanc 2014年

1
SDK不一定是接口上的抽象层。SDK是该接口的实现。(如果还有另一个抽象层,问题是为什么不将其指定为接口本身的一部分)
Jason S

我同意这个定义,但同时又想知道为什么iOS和Android使用术语API来表示蓝牙库(iOS核心蓝牙API,Android蓝牙API)吗?
坦伯格

59

API就像孩子玩的一些令人费解的游戏的组成部分一样,可以将不同形状的块连接起来并构建他们可以想到的东西。

另一方面,SDK是一个合适的工作室,在这里可以使用所有的开发工具,而不是预制的构建块。在工作室中,您拥有实际的工具,并且不仅限于块,因此可以制作自己的块,也可以创建没有任何块的东西。

无需SDK或API进行编码就像没有车间就从头开始制作一切-您甚至必须制作自己的工具


您说SDK没有预成形的构​​建块,但是JAVA SDK带有数据结构,例如ArrayList或HashMap ...?
Koray Tugay

1
是的,您可以将其视为构建块,但另一方面,Java将其作为工具提供,而不作为构建块。
Abdul Rehman

1
当我尝试阅读和理解Facebook文档时遇到了这个问题:developer.facebook.com/docs/javascript让我感到困惑的是Facebook将其称为javascript SDK,我认为它更像API。因为它不提供任何有形工具,而仅提供开发人员可以使用的库,所以它不应该被称为API而不是SDK吗?
shenkwen 2015年

imo对SDK的解释不太有效。与其说not limited to blocks, or can create something without any blocks to begin with,SDK更像是为您提供了要使用的API块的更好组合。SDK建立在API之上。
Don Cheadle

26

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

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

如果C要向其他公司/系统提供P的功能,则可以使用API来提供

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

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

实际上,它们实际上是完全不同的。

您使用SDK构建内容,并使用或使用API​​。


22
您应该只将答案编辑到最后一行,然后跳过所有的blah-de-blah。
mhenry1384

如果C提供了一组驱动P的软件的库,则这些库将构成API,而不是SDK(除非它是绝对最小的SDK,仅是API)。除了原始API外,SDK还将包括这些API以及开发人员需要的所有其他东西,因此也称为“工具包”。因此,构建和使用/消费(+ /控制/交互)和使用某些东西是正确的,但是区别会被混淆。
乔什·萨特菲尔德

12

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

虽然软件开发工具包是围绕API的封装/秒,使工作方便开发者。

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

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


只是认为引用一些示例会很好。
user3137634 2015年

9

我不确定这两个术语是否有任何正式定义。我知道API是一组记录的可编程库和支持源,例如标头或IDL文件。SDK通常包含API,但经常向其添加编译器,工具和示例。


1
从技术上讲,需要指定API,但不必公开记录它们,它们可能是秘密的。
杰森S

8

API是有关操作方法的规范,以及一个接口,例如“铁轨相距4英尺,金属棒为1英寸宽”,现在您有了API,现在可以构建适合这些铁路的火车跟踪您是否要去任何地方。API只是有关如何构建代码的信息,它不会执行任何操作。

SDK是已经担心规格的一些实际工具包。“这里是火车,煤和维护人员。使用它可以到处移动”有了SDK,您不必担心细节。SDK是实际的代码,可以单独使用它来执行某些操作,但是,当然,火车不会自发启动,您仍然必须让指挥员来控制火车。

SDK也有自己的API。“如果要给火车提供动力,则在其中放煤”,“拉动蓝色杠杆以移动火车。”,“如果火车开始表现滑稽,请致电维修人员”等。


3

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

SDK =一个文字处理系统……适合2岁的婴儿……从创意中汲取灵感

尽管您可能会在几年后上学并成为您的语言精通者,但使用SDK可以帮助您立即编写出有意义的句子(在这个例子中,请原谅一个事实,即使您还是婴儿,学习其他任何语言,至少要学会使用SDK。)


2

怎么样...就像您想在家里安装家庭影院系统一样。使用API​​就像获取所有电线,螺丝,钻头和零件一样。可能性是无限的(仅受您收到的作品限制),但有时势不可挡。SDK就像获取套件。您仍然必须将它们放在一起,但这更像是为IKEA书架获取预先切割的零件和说明,而不是一盒螺丝钉。


0

您使用SDK来访问库的功能,并使用API​​来对其进行控制。


0

API =应用程序编程接口SDK =软件开发套件

一个SDK似乎是一套完整的API s表示允许你执行你最需要创建应用程序的任何行动。另外,SDK可能包括用于为其开发的平台/项目开发的其他工具。

一个API,另一方面仅仅是一系列相关的方法可能是为特定目的良好。

例如,JDK(Java开发工具包)包含API以及编译器,运行时和其他杂项工具。Java API只是构成您可以立即使用的核心语言的所有库。

API的示例:Java API,Google Maps API,Flash Player API。

SDK的示例:JDK,GWT,Flex SDK。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.