API和SDK有什么区别?


174

当我意识到无法真正分辨出APISDK之间的区别时,我正在研究各种API和SDK

从概念上讲,这两种方法都是您的程序与另一种软件进行交互并控制另一种软件提供的资源的一种方式,而无论该其他软件是Web服务,最终用户应用程序,OS服务或守护程序还是内核设备驱动。

那么,SDK和API在语义上有什么区别?


3
SDK是一个开发工具包,通常是一个方便使用API​​的客户端库。API只是库/服务定义和/或文档。
Dietbuddha

另请参见“ 库与框架与API?”
2016年

Answers:


175

我认为它应该遵循“所有SDK都是/包含API,但并非所有API都是SDK”的思路。

SDK似乎是一套完整的API,可让您执行创建应用程序所需的大多数操作。此外,SDK可能包括用于为其开发的平台/项目开发的其他工具。

另一方面,API只是一系列相关的方法,可能对特定目的有用。

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


6
我想补充一点,SDK只是您与上述API交互方式的一个示例。
松饼人

10
我想你可能已经把尼克弄倒了。SDK是事物的超集,它包含(除其他事项外)与它的库进行交互的API(不是库本身,而是使用该库的编码人员将使用的库接口)。
丹尼·史泰普

7
SDK可以包括API,工具,文档,示例以及所有其他所需的东西。
gregmac 2011年

4
@gregmac我没有传达这个事实吗?

实际上,可以说一个API最有可能仅包含类应实现的接口定义,而一个SDK将包含具有大多数已编程标准功能的基类吗?
2015年

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

因此,真正的区别在于,API至少等于或等于“某些服务”的接口,而SDK是针对特定目的的一组工具/组件/类。实际上,SDK会为您提供与之交互的API。但是您可能会在没有基础组件的情况下使用API​​,例如,通过Web服务提供API时。

API的示例:

SDK的示例:


3
+10表示“您可能在没有基础组件的情况下使用API​​”。顺便说一句,第二链路断开.......
Pacerier

24

API→已记录的界面(在某个时间点和特定的受众。对于公众,文档可能是不完整和/或不可用的,这可能是故意的,但这并没有使要记录的事实变暗供第三方使用。)

SDK→界面文档(+示例和工具)


4
最后有人提到文档!
gregmac 2011年

4
并非所有API都有文档记录-有时您只需要检查/反映接口即可。
JBR威尔金森2014年

“示例”不是API的一部分吗?
Pacerier,2014年

1
@Pacerier ...绝对不是。示例可能是API 文档的一部分,但纯粹的接口可能是“未文档化的”(即,有关该文档的文档对外界保密:think ... idk,microsoft),同时仍然是API。这只是界面。函数,类,调用,也许是协议,也许是文件格式,但仅此而已。
2014年

17

“ SDK”比“ API”在更大的意义上是集体的。

通常,您只能找到一个涵盖整个平台的SDK。例如,有一个MacOS X SDK和一个iOS SDK,并且每个都包含用于许多不同功能区域的API。

“ API”最初也被用作集体术语,并且仍然经常以这种方式使用(MAPI,WSAPI等),但通常仅限于某些特定技术。这些年来,“ API”所隐含的范围似乎有所缩小。人们过去常常谈论“ Mac Toolbox API”或“ Windows API”,两者显然都包含许多功能。如今,听到“ API”用来表示单个系统功能已经很普遍了。可以说一个新版本的操作系统包含数百个新的API,这意味着数百个新的系统调用。

没有上下文,这两个术语都不是非常精确。


11

什么是API?

API是允许软件程序相互交互的接口。它定义了一组规则,程序必须遵循这些规则才能相互通信。API通常指定应如何定义例程,数据结构等,以便两个应用程序进行通信。API提供的功能有所不同。有一些通用的API提供诸如Java API之类的编程语言的库功能。也有提供特定功能的API,例如Google Maps API。还有依赖于语言的API,这些API只能由特定的编程语言使用。此外,还有独立于语言的API,可以与多种编程语言一起使用。通过仅将所需的功能或数据暴露于外部,同时保持应用程序的其他部分不可访问,需要非常仔细地实现API。在Internet上,API的使用已变得非常流行。允许通过API将某些功能和数据传递到Web外部已经变得非常普遍。可以组合该功能以向用户提供改进的功能。

什么是SDK?

SDK是一组工具,可用于开发针对特定平台的软件应用程序。SDK包含有助于程序员开发应用程序的工具,库,文档和示例代码。大部分SDK可以从互联网上下载,并且许多SDK是免费提供的,以鼓励程序员使用SDK的编程语言。一些广泛使用的SDK是Java SDK(JDK),其中包括所有库,调试实用程序等,这将使用Java编写程序更加容易。SDK无需寻找彼此兼容的组件/工具,并且将所有组件/工具都集成到易于安装的单个软件包中,从而使软件开发人员的工作变得容易。

API和SDK有什么区别?

API是允许软件程序彼此交互的接口,而SDK是可以用于开发针对特定平台的软件应用程序的一组工具。SDK的最简单版本可以是API,其中包含一些与特定编程语言进行交互所需的文件。因此,可以将API视为没有所有调试支持等的简单SDK。


7

SDK只能是API(用于帮助与另一个应用程序接口的文件),而通常包括用于帮助调试的其他代码以及用于IDE的其他部分。

我全都没有缩写词。


8
很快,给自己更多的TLA!
梅森惠勒

4
我即将准备EIEIO。
JeffO 2011年

5

前面提到的一切都是对的,但是关于SDK,我想补充一点,一个软件开发工具包是(或者应该是)一个非常完整的程序包,其中包含(几乎)开发过程所需的所有工具,而API只是一个接口与之互动。


1

我的两分钱:我相信API一词经常被错误地使用。

API是应用程序编程接口。

尽管名称有点笨拙,但这意味着它是一个接口。因此,一个应用程序可能具有允许其他应用程序与其通信的API。一件软件(例如,OO系统中的类)可能会提供API,以允许系统中的其他模块与其进行通信。

但是,术语API通常被用作“库”的同义词。我认为这不是正确的用法。部分库是一个API,允许代码中使用它,但库不是一个API。

SDK是一种库,因此可能会造成混淆。


1
我同意。我可能会说这是“不正确的”。该船已经航行,对“ API”的使用发生了变化。但我确实同意,“图书馆”通常是人们称为“ API”的更好的词
哈里·伍德

0

其他许多答案都说明SDK是一种工具,但没有一个直接出现,并说API是一种规范

组件X的API是编写与X交互的其他组件所需的全部信息。组件X的SDK可能包含库例程,使您更容易编写该组件,但这些库不是API:它们仅仅是API的一个体现


这仅仅是您的意见,还是可以通过某种方式予以支持?
t

“ API描述并规定了预期的行为,而库是这套规则的实际实现” 。en.wikipedia.org/wiki/…
所罗门慢,

按我的阅读,这是不相关的点你想使“一个API是一个规范”
蚊蚋

-3

我想比较一下。

如果您是使用Microsoft工具的开发人员:

API = Microsoft.Net Framework与SDK = Visual Studio

如果您是使用Java的开发人员:

API = Java运行时与SDK =任何提供开发套件(JDK)的工具

我猜一个SDK一定会依赖于相应的API-没有API就没有SDK。


我认为您所说的关于Visual Studio的是一个IDE,它可以提供对一个或多个SDK和/或API的访问。
KeithS

1
Visual Studio不是SDK,但是某些版本包含Windows或.NET SDK,因为您可能会使用VS为它们开发。
JBR威尔金森2014年

-3

这是一个简单的类比... API就像您可以使用的单词,而SDK就像是为您组合在一起的句子。


-4

随着应用程序与其他应用程序接口的开发和增强,需要允许其他应用程序(逻辑)与核心逻辑接口-这是通过一组定义的API来完成的。SDK用于创建/制作使用API​​与其他应用程序进行交互的代码。


1
这似乎并没有提供任何实质性的过度点进行,而且在以往11个回答解释
蚊蚋
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.