参考资料:前端
https://www.jianshu.com/p/cac186cb168b编程
http://www.javashuo.com/article/p-fsinuzmm-ky.html后端
今天看到一个开源的Office软件,叫LibreOffice。心想着大概和微软的Office用起来差很少吧,进到下载界面看到多个能够下载的选项:软件包,SDK,SourceCode。浏览器
软件包天然不用说,别人打包好的dmg文件,直接安装就可使用了,相关的库也都一并安装到电脑中。SouceCode就是源代码了,须要打包或者Build以后才能变成咱们见到的软件,过程当中还须要有写GUI之类的操做,Python这种语言无需编译,而想C语言这些每每须要先编译而后再打包。服务器
问题来了,什么是SDK呢?为何软件发布者将SDK单独列出来?SDK和API的区别如何?查找资料后解答以下:框架
若是对方须要你提供一个API,是指一个工程提供给另一个工程的接口(通常是基于http协议)。编程语言
若是对方须要你提供一个SDK,是指基于对方工程的编程语言,提供一个代码包。在这个代码包中,你能够调用操做系统的接口,能够调用其余系统的接口,或者什么都不调用,都与对方无关。函数
也就是说,API是须要别人协助的,API提供者会给你提供服务,你只须要写一段代码调用这个API,把相关请求发给服务提供者,服务提供者会把处理好的结果发给你,这就实现了API的调用。而SDK则是至关于软件的提供者把他们提供服务的代码交给你了。你拿到SDK实现自给自足,就能够绕过服务的提供者直接把本身以前想作的事利用SDK很快的在当地实现而和软件提供者毫无瓜葛。工具
补充资料:开发工具
随着软件规模的日益庞大,经常须要把复杂的系统划分红小的组成部分,编程接口的设计十分重要,程序设计的实践中,编程接口的设计首先要使软件系统的职责获得合理划分,良好的接口设计能够下降系统各部分的相互依赖,提升组成单元的内聚性,下降组成单元间的耦合程度,从而提升系统的维护性和扩展性。API是接口的一种,在程序交互中具备重要的做用,而SDK与API有着密不可分的关系。
API
(1)API的概念
API即“应用程序编程接口”,是一些预先定义的函数,目的是做为“介面”沟通两个不一样的东西,提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工做机制的细节。
其实就是别人已经写好的能够实现特定功能的函数,而你只须要根据他提供好的接口,也就是调用他的方法,传入他规定的参数,而后这个函数就会帮你实现这些功能。
从接口interface来讲,在计算机领域是指两个不一样事物之间交互的地方,大能够到两个完整的不一样系统,小能够到两段程序。因此这个I就这么理解。在这个基础上,人和程序交互的地方,叫作UI,user interface,全部人输入的包括鼠标键盘触摸屏声音输入都算。那么程序和程序交互的就叫作API,全部非人对非人交互都经过API进行交互,所谓交互,其实就是传递数据,触发功能。
(2)API应用案例
示例场景:假如你是一家小企业,公司网站上有一个表格是用来给客户注册预定的。你想要凭借这些预定细节信息,让客户可以自动在谷歌日程上建立活动。
API使用:这就意味着,你的网站服务器须要直接与谷歌服务器进行对话,在掌握既定细节信息的状况下,申请建立活动。以后,你的服务器就会接收到谷歌的响应并进行处理,而后将相关信息发送回浏览器,好比说向用户发送一个确认信息。
(3)API产品——如今也有公司将API包装成产品
案例:Weather Underground出售其天气数据API的访问权限给其余人。
(4)API的分类
API又分为(Windows、Linux、Unix等系统的)系统级API,及非操做系统级的自定义API。做为一种有效的代码封装模式,微软Windows的API开发模式已经为许多商业应用开发的公司所借鉴,并开发出某些商业应用系统的API函数予以发布,方便第三方进行功能扩展。如Google、苹果电脑公司,以及诺基亚等手机开发的API等等。
API又分为开放式API和私有API。顾名思义,开放式API便是向全部人公开的接口,容许任何人调用它并获取到它背后的数据,有时公司会将 API 做为其公共开放系统,也就是说,公司制定本身的系统接口标准,当须要执行系统整合、自定义和程序应用等操做时,公司全部成员均可以经过该接口标准调用源代码,该接口标准被称之为开放式API。私有API即接口未对外开放。
SDK
(1)SDK的概念
SDK即“软体开发工具包”,通常是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操做系统等创建应用软件的开发工具的集合。通俗点是指由第三方服务商提供的实现软件产品某项功能的工具包。
一般SDK是由专业性质的公司提供专业服务的集合,好比提供安卓开发工具、或者基于硬件开发的服务等。也有针对某项软件功能的SDK,如推送技术、图像识别技术、移动支付技术、语音识别分析技术等,在互联网开放的大趋势下,一些功能性的SDK已经被看成一个产品来运营。
开发者不须要再对产品的每一个功能进行开发,选择合适稳定的SDK服务并花费不多的经历就能够在产品中集成某项功能。
(2)SDK和API的区别
SDK至关于开发集成工具环境,API就是数据接口。在SDK环境下调用API数据。
实际上SDK包含了API的定义,API定义一种能力,一种接口的规范,而SDK能够包含这种能力、包含这种规范。可是SDK又不完彻底全只包含API以及API的实现,它是一个软件工具包,它还有不少其余辅助性的功能。
SDK 包含了使用 API 的必需资料,因此人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫作“SDK编程”。
通俗语言解释
API
前端调用后端数据的一个通道,就是咱们俗说的接口,经过这个通道,能够访问到后端的数据,可是又无需调用源代码。
SDK
工程师为辅助开发某类软件的相关文档、范例和工具的集合,使用SDK能够提升开发效率,更简单的接入某个功能。
举例说明:一个产品想实现某个功能,能够找到相关的SDK,工程师直接接入SDK,就不用再从新开发了。