随着软件规模的日益庞大,开发者常常需要把复杂的系统划分成小的组成部分,这个时候,编程接口的设计就显得尤为重要。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
而对于接口,最让大家耳熟能详的莫过于API和SDK。这两者都有哪些特点,作为开发者又该如何选择,今天的这篇文章,将给你全方位的解答。
什么是API?如果你在百度百科上搜索,你会得到如下结果:
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问特定的能力,而又无需访问源码,或理解内部工作机制的细节。
通俗易懂的说,API 其实就是别人已经写好的可以实现特定功能的函数,而你只需要调用他的方法,传入他规定的参数,然后这个函数就会帮你实现这些功能,且不需要知道这些功能的具体实现过程都是什么。
API 的程序功能包括以下这几个方面:
远程过程调用(RPC)
通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
标准查询语言(SQL)
是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。
文件传输
文件传输通过发送格式化文件实现应用程序间数据共享。
信息交付
指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。
而至于SDK即为“软件开发工具包”,是用于为特定软件包、软件框架、硬件平台、操作系统等建立应用软件时所用的开发工具的集合。
SDK实现其功效的主要手段是封装操作。封装是在客户端层面的Library(也叫做“包”或者“库”)进行的,这个Library可以是Dynamic Library(动态库)或者 Static Library(静态库),它提供的是一些客户端API接口。
当然,SDK不光存在于客户端,服务端也有,只要是封装了一组完整的操作和规范就算。所以,可以说SDK实际上是一种中间服务的功能,将一组不易使用及不透明的API封装成另一组对第三方透明且易于使用的API。比如说支付宝SDK,是把支付宝内部的一些API操作封装之后,暴露成易于外部开发人员使用以及兼顾数据安全性的另一组API,就可以称为SDK。
云服务实现了IT资源与能力的共享,通过API和SDK,开发者得以像搭积木一样快速搭建产品架构,这大大降低了开发成本与门槛。而对于软件提供商来说,留出API和SDK,让别的开发者来调用,形成生态,软件才能发挥最大的价值;
那么问题来了,两种接口都是如此的优秀,身为开发者,该如何选择呢?
从本质上来看,API是一个具体的函数,一个确定的功能,已经明确了它的作用(比如做加法)。而SDK就像是很多方法的集合体,是一个工具集。比如你要做加法,你就调用计算机SDK的加法API,要做减法就调用减法API,无论你想完成什么计算,SDK里总有能实现的方法。再比如你要开车去一个地方,车就是SDK,可以让你完成到达目的地的目的。车上的方向盘,灯,发动机,油门,刹车像一个个API,你在使用SDK时,就是调用一个个API功能。如果贴心一点的车,可能还带有使用说明(SDK说明文档)。
SDK还有一点是除了提供完善的接口,它还会给你提供开发环境。例如java的JDK里,除了各种API,还包括了java运行需要的JRE。
而从整体运维上来看
API开发成本低,对接比较简单,可以快速验证商业模式和用户体验,但是API会经过对接平台,厂商会获取到对接平台相关数据信息。而SDK对接后的功能比较稳定,响应速度快,而且对接平台相关数据不会被获取,但是需要的开发环节较多,开发工作量大,对接周期略长。
所以,大家在实际开发过程中,如果只是简单功能调用,还是使用API更快速便捷一些;如果是繁琐复杂的功能,多数情况下还是使用SDK更稳妥一些。
总而言之,没有哪种接口是最好的,只有哪种接口是最适合开发需求的。
【本文为51CTO专栏作者“移动Labs”原创稿件,转载请联系原作者】