封装是在客户端层面的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”原创稿件,转载请联系原作者】