SDK和API的区别

以下内容转载自 https://blog.csdn.net/snowin1994/article/details/80608079

举个例子:

在这里,一个简单的功能链条我将它分为三个组成部分:

    1、客户端组装数据

    2、客户端使用组装的数据来请求服务端(或者操作系统)的 api

    3、服务端(或者操作系统)的 api 处理数据并返回处理结果

 

结合这个链条得出结论:

    1、api为细粒度的功能接口

    2、sdk包含第2、3步

    3、sdk为api的集合

 

----2019.03.21更新----

应观众要求,再白话一点,可能有不严谨的地方,大概是这么个意思:

 

比如需要实现一个获取用户信息的功能。

大王实现一个api(http://api.sunxuefeng.com/user/userinfo),可以通过传递参数(token)来获取用户信息。如果小王要使用这个api,需要写如下代码(php示例):

function getUserInfo($token) {
    if (empty($token)) {
        throw new \Exception('token is empty');
    }
 
    $host = 'api.sunxuefeng.com';
    $param = ['token' => $token];
 
    $userInfo = curl($host, $param, 'GET');
 
    return $userInfo;
}

这样小王就可以使用大王提供的api了。但是小王这人比较懒,要求大王给他提供一个sdk来搞定这个功能。

然后大王就把上面的代码(sdk)发给小王,让他调用这个函数,传递一个 token 进来就可以获取到用户信息。

 

----2019.04.08更新----

 

狭义的说法,在实际工作中,

如果对方需要你提供一个api,是指一个工程提供给另外一个工程的接口(一般是基于http协议)。

如果对方需要你提供一个sdk,是指基于对方工程的编程语言,提供一个代码包。在这个代码包中,你可以调用操作系统的接口,可以调用其他系统的接口,或者什么都不调用,都与对方无关。

以下内容来自百度百科

SDK

软件开发工具包(缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
软件开发工具包括广义上指辅助开发某一类软件的相关文档、范例和工具的集合。
软件开发工具包是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发 Windows 平台下的应用程序所使用的 SDK。它可以简单的为某个程序设计语言提供应用程序接口 API 的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。
为了鼓励开发者使用其系统或者语言,许多 SDK 是免费提供的。软件工程师通常从目标系统开发者那里获得软件开发包,也可以直接从互联网下载,有时也被作为营销手段。例如,营销公司会免费提供构建SDK 以鼓励人们使用它,从而会吸引更多人由于能免费为其编程而购买其构件。
SDK 可能附带了使其不能在不兼容的许可证下开发软件的许可证。例如产品供应商提供一个专有的 SDK 可能与自由软件开发抵触。GPL 能使 SDK 与专有软件开发近乎不兼容。LGPL 下的 SDK 则没有这个问题。

API

API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API而使操作系统去执行应用程序的命令(动作)。其实早在DOS时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH置为 30h后调用INT 21h就可以得到DOS 操作系统的版本号。而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。
可以这么说,DOSAPI 是 “Thinking in汇编语言” 的,而 Windows API 则是 “Thinking in 高级语言” 的。
DOSAPI是系统程序的一部分,他们与系统一同被载入内存并且可以通过中断矢量表找到他们的入口,那么 什么是Windows API 呢?要说明白这个问题就不得不引入我们下面要介绍得这个概念——DLL。

DLL

DLL,即 Dynamic Link Library(动态链接库)。在 Windows 环境下含有大量 .dll格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。其实 Windows 的三大模块就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API函数的执行代码。为了使用 DLL 中的 API 函数, 必须要有 API 函数的声明(.h)和其导入库(.lib),导入库可以先这样理解:导入库是为了在 DLL 中找到 API 的入口点而使用的。
为了使用 API 函数,我们就要有跟 API 所对应的 .h 和 .lib 文件,而 SDK 正是提供了一整套开发 Windows 应用程序所需的相关文件、范例和工具的“工具包”。
SDK 包含了使用 API 的必需资料,所以人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫做 “SDK编程”。而API和 SDK 是开发Windows应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如VCL 和MFC,虽然他们比起 “SDK 编程” 来有着更高的抽象度,但这丝毫不妨碍我们在需要的时候随时直接调用 API 函数 。

你可能感兴趣的:(project)