美文网首页
什么是API?什么是SDK?两者有什么区别和联系?何时使用?

什么是API?什么是SDK?两者有什么区别和联系?何时使用?

作者: 产品经理之禅 | 来源:发表于2020-05-09 12:01 被阅读0次

    随着软件规模的日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要,程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分,良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。API是接口的一种,在程序交互中具有重要的作用,而SDK与API有着密不可分的关系。

    本文通过四个问题入手:

    1.什么是API?

    2.什么是SDK?

    3.两者有什么区别和联系?

    4.应该提供SDK还是API呢?

    1、什么是API?

    讲个小故事:

    研发人员A开发了软件A,研发人员B正在研发软件B。

    有一天,研发人员B想要调用软件A的部分功能来用,但是他又不想从头看一遍软件A的源码和功能实现过程,怎么办呢?

    研发人员A想了一个好主意:我把软件A里你需要的功能打包好,写成一个函数。你按照我说的流程,把这个函数放在软件B里,就能直接用我的功能了!

    其中,API就是研发人员A说的那个函数。

    API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API而使操作系统去执行应用程序的命令(动作)。

    日常生活中,我们有很多类似API的场景,比如:

    电脑需要调用手机里面的信息,这时候你会拿一根数据线将电脑手机连接起来,电脑和手机上连接数据线的接口就相当于“API接口”。

    划重点:

    1)API其实就是一些预先定义好的函数,作为一个接口提供给其他开发人员使用。

    2、什么是SDK?

    SDK 就是 Software Development Kit 的缩写,翻译过来——软件开发工具包。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做SDK。通俗点是指由第三方服务商提供的实现软件产品某项功能的工具包。

    SDK被开发出来是为了减少程序员工作量的。

    比如——

    有公司开发出某种软件的某一功能,把它封装成SDK(比如数据分析SDK就是能够实现数据分析功能的SDK),出售给其他公司做开发用,其他公司如果想要给软件开发出某种功能,但又不想从头开始搞开发,直接付钱省事。

    划重点:

    1)SDK是一套工具包,需要原厂做开发,里面包括了开发文档(就是说明书),范例(源代码写的),DEMO工具,封装好的库等;

    2)对于某些公司不想从头搞开发,直接用SDK是最省钱高效的办法;


    3、两者有什么区别和联系?

    SDK相当于开发集成工具环境,API就是数据接口。在SDK环境下调用API数据。

    实际上SDK包含了API的定义,API定义一种能力,一种接口的规范,而SDK可以包含这种能力、包含这种规范。但是SDK又不完完全全只包含API以及API的实现,它是一个软件工具包,它还有很多其他辅助性的功能。

    SDK 包含了使用 API 的必需资料,所以人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫做“SDK编程”。

    简单的说:API是SDK的一个子集,API只定义了一些函数,并给了调用的方法,而SDK不仅仅定义了相关函数,给了调用方法,还直接把功能给实现了,供开发人员直接调用,而不需要重新开发。

    也正是因为这样的区别,提供给客户的API,就只有一个文档,文档告诉了客户如何调用产品API接口的方法,如何传入参数等。

    而提供给客户的SDK,除了说明文档,还包括由开发人员开发并编译好了的库文件(如果是Windows SDK就是DLL库文件),DEMO程序,源代码示例(示例是最佳的告诉开发人员使用SDK的办法了)。

    4、应该提供SDK还是API呢?

    这要视情况而定。

    如果客户具备很强的开发能力,提供API给客户对于企业来说,是最省事的,客户在开发时,也只是调用你产品的API接口而已,客户碰到问题找你,无非就是你们的产品是否有这个API接口,如果没有,企业能否开发或开放他所需要的接口,除此之外的一切开发工作,都在客户侧。

    提供API给客户,客户需要的开发工作量大,费时长,但好处是,控制权在自己手里,想怎么开发就怎么开发,碰到非API接口本身的问题,自己解决,不受限于原厂,风险可控。

    如果客户的开发能力很一般,且要求能够快速实现自己想要的功能,那么提供SDK给客户,就是最合适的了。

    提供SDK给客户,客户最省事,客户的开发工作量小,但他如果碰到SDK的问题,他必须找原厂,因为提供给客户SDK包里面可供调用的库文件,是编译过的,客户无法进入到源代码级别进行调试定位问题,必须将相关信息反馈给原厂,由原厂进行源代码级别的分析定位,一来一回,很是折腾。

    提供SDK给客户,客户最省事,但碰到SDK层面的问题,客户无法自己解决,一定要原厂来解决,风险不可控。

    最后,打个比方来帮助还在云里雾里的你来理解二者的区别:

    有一个椰子,它的名字叫做“SDK”。

    可乐上插着吸管,吸管的名字叫“API”。

    你这个人就是客户要开发的“XX系统”。

    如果你想喝到SDK里的椰汁(让XX系统拥有SDK中的功能),你必须通过API这根吸管来实现(通过API连接你的系统和SDK工具包),否则你就喝不到椰汁。

    所以:

    SDK=放着你想要的软件功能的软件包

    API=SDK上的接口(或产品上的接口)

    参考资料:

    1.简道云,SDK和API的区别?知乎

    2.沃伦牛,协作利器:SDK和API,闻西说科技

    相关文章

      网友评论

          本文标题:什么是API?什么是SDK?两者有什么区别和联系?何时使用?

          本文链接:https://www.haomeiwen.com/subject/wlhqnhtx.html