【碎碎念】API、SDK和框架的区别
最近工作接触到SDK,稍微了解了下,看了下网上举的例子,不是特别满意。
自己以买卖股票举个栗子,解释下API、SDK和框架之间的区别,以下是笔记。
API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。—— 百度百科
先不理会上面的概念,先讲一个买股票的事情。
例如你要买「茅台公司」的股票,你不能直接跑到证券交易所大喊我要买茅台股票,这样会没人鸟你,场面会一度很尴尬…
因为股市实际是采用「会员制」的,即你买卖股票必须通过「券商」完成
所以你买股票的过程就相当于
「你」->「券商」->「股票」
你间接的通过「券商」买到了股票,而你在买股票过程中,有一些操作
- 填写信息
- 买多少
- 多少的价格买入
- 结果
拥有了茅台XX股的股票
过程中,你只需要告诉「券商」买多少,多少价格买入,然后看最终的结果即可,即你压根不需要关系券商是如何购买到这些股票的,中间发生了哪些极其复杂的操作。
好的,记住上面买股票的例子。
回到软件开发中,同理,在软件开发中,也是同样的道理。
例如你要使用调用第三方的登录API进行登录,这里涉及到三个概念
- 登录API
- 登录API-入参
- 登录API-出参
实际登录操作中
- 你通过填写「登录API-入参」,一般是账号和密码
- 使用「登录API」进行登录
- 获得「登录API-出参」返回的结果——登录成功
我们来对比下买股票的例子。
买股票 | 登录 | |
---|---|---|
API-入参 | 1. 买多少 2. 多少的价格买入 | 1. 账号 2. 密码 |
API | 券商 | 登录API |
API-出参 | 拥有了茅台XX股的股票 | 登录成功 |
有没有发现,道理的相同的,API是已经预设好的「函数」,你只需要按照API的要求填写「入参信息」,然后等待「出参结果」即可,中间API内部执行了哪些复杂的操作(例如登录,去校验这个账号有没有登录权限,账号密码是否正确,需不需要验证码验证等等)你是不需要关心的。
SDK
软件开发工具包(缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。—— 百度百科
上面的定义讲的比较复杂。
我们还是想讲讲买股票这件事。
假设你想购买上海证券交易所挂牌上市的市场规模最大,流动性最好的50只股票。
我们还是通过「券商」的方式购买
方式如下:
「你」->「券商」->「股票1」
「你」->「券商」->「股票2」
「你」->「券商」->「股票3」
…
「你」->「券商」->「股票50」
发现了吗,这样购买起来很累。
聪明的公司推出了「基金」,你甚至不需要到证券市场开户,即可购买基金。
而通过购买跟踪「中证50」的基金,就能实现每购买一笔100元的「中证50」基金,相当于购买了这50个公司每个公司2元的股票。
所以,你不通过「券商」,而选择在「场外」购买基金公司的基金,从而购买股票的方式可以看成如下。
「你」->「基金公司」->「券商」->「股票1~50」
酱紫,对「基金公司」而言,可以简单看成,他替你完成了在「券商」购买股票的50次过程
回到软件开发中,同样的道理
对于一件事,如果对方提供了API,但是你需要调用多个API才能完成这件事(好比买50个公司的股票,你需要调用50次「券商」的API)
这时候,对方如果提供了一个SDK,那么事情就变得简单了!
让SDK帮你处理这50次的调用,而你只需要给出一个指令即可。
所以,SDK可以看成是一个 更便利的整合API,同样有 入参和出参,只是这个「整合API」将你需要去各个地方调用各种API的事情给做了。
因此,SDK,可以看成是以一组API为输入,以另外一组API作为输出的中间件
用「微信登录」SDK作为例子,可以简单看成
买50个公司的股票 | 微信登录SDK | |
---|---|---|
SDK-入参 | 1. 买多少 2. 多少的价格买入 | 用户在手机微信APP上点击「授权登录」 |
SDK | 基金公司 | 微信登录SDK |
SDK-出参 | 拥有了50家公司的股票 | 微信第三方登录成功 |
PS:我们最熟悉的「余额宝」货币基金,就可以看成一个特大号的SDK
框架
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。—— 百度百科
框架,简单讲,就是一个特别NB的SDK,整合了大量SDK的功能,通过这个框架你能快速进行各种功能开发,而不需要关心底层是如何实现的。
真要举个栗子的话,你可以简单理解为「支付宝」吧。
通过支付宝,你能直接调用各种预定义好的SDK,做各种事情。
「你」->「支付宝」->「买基金SDK」
「你」->「支付宝」->「买黄金SDK」
「你」->「支付宝」->「买保险SDK」
「你」->「支付宝」->「缴纳水电费SDK」
…
PS:以上例子仅作为理解概念用,和实际定义有一定偏差
其他解释
在知乎看到另一个例子
· API 就是乐高积木的各种颗粒
· SDK就是一大包乐高积木,里面有颗粒(API),有各种小工具
· APP就是最后你搭出来的一艘飞船
(SDK、API 和 app 之间的关系和联系是什么? - snake doctor的回答 - 知乎)