sdk跟api的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sdk跟api的区别是啥?相关的知识,希望对你有一定的参考价值。

1、组成不同:

sdk软件开发工具包括广义上指辅助开发某一类软件的相关文档、范例和工具的集合。API(应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。

2、用途不同:

api目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。软件开发工具包一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具。

3、内容不同:

为了使用API函数,就要有跟API所对应的 .h和 .lib文件,而SDK正是提供了一整套开发Windows应用程序所需的相关文件、范例和工具的“工具包”。SDK包含了使用API的必需资料,所以也常把仅使用API来编写Windows应用程序的开发方式叫做“SDK编程”。

参考资料来源:百度百科-sdk

参考资料来源:百度百科-api

参考技术A   SDK就是Kit,工具箱嘛,ios平台上就是XCode,一系列的工具组合在一起,比如你在编辑器里敲代码的时候它会自动补全代码,自动错误检查,你点一下Run,它会调用编译器来自动编译,编译完它会调用iPhone的模拟器来运行,这就是SDK,提供整套的开发工具供开发者使用。
  OpenAPI就是网站提供的接口,比如你想开发一个围脖的手机客户端,你从哪里读取数据写入数据呢?总不能从Web版里调用吧?那里是一堆一堆的html代码啊,所以OpenAPI就是网站提供的接口,供开发者接入用的,比如聚合数据平台。
  

  SDK (Software Development Kit)翻译成中文就是"软体开发工具组"
是用来帮一个 产品 或 平台 开发应用程式的工具组,由产品的厂商提供给开发者使用的。
通常是 某一家厂商 针对某一 平台 或 系统 或 硬体 所发布出来用以开发应用程式的工具组,
在这个工具包里面,可能包含了各式各样的开发工具,模拟器等。
例如:给 android平台 使用的 Android SDK 就是用来开发 Android系统上面的应用程式。
API (Application Programming Interface)
翻译成中文就是"应用程式介面",其实这样翻译不好,应该说是"程式沟通介面"。
翻译为介面,顾名思义就要沟通两个不同的东西用的,通常由一组函式库所组成。
在一个 同一个平台 下的 两个不同东西(程式 or 系统),为了能取用对方的功能等等,
所以一个 X程式 写了一组函式,让 同一平台的其他程式 取用 X程式 的功能,
那组函式就可以说是那个 X程式 对外开放的 API。
例如:我要在 自己的网页 上加入 google map网页的功能,就使用 "google map API"

有时候 SDK(开发者工具包) 里也会带有些许 API 用来调用一些系统平台程式提供的功能
例如说:视窗显示,图形特效等等。
以下举一个实际例子来说明,调用系统程式功能的API 是怎麽一回事
开发Windows应用程式的SDK(开发者工具包) 里就包含 Win32 API
说明: Win32 API 是一个函式库,可以给Windows应用程式 调用 Windows系统的功能
在PTT看到有人问了差异性,我的看法是
SDK是用来开发某一个平台的程式的工具包,API 是让同一平台下的程式取用它的功能的函式库。
以及下面的评论
1.API 通常大家都不会弄错,的确就是以功能为导向的"方法"或"函式"清单,
看程式语言或平台而定( Methods, Functions... ),
而每个 API 主要都是为了达成某特定功能所设计的。
开发商可以为了不同平台,设计相同的 API 让开发者使用,
也可能会因应不同平台,制作不同的 API 让开发者使用。
2.当 API 数量够多功能够繁复并且可交互为用的时候,
( 例如为了达成某些功能,常需要同时引用某些 APIs 来完成 )
开发商就会为了开发便利,而预先撰写好一些组合好 APIs 的 API
供开发者使用,来统一有特定需求的开发者能有一致的开发与使用体验,
( 例如让使用"网路连线"的开发者不需自己处理网路的基础沟通信息,
与错误处理方式,使 API 在应用的时候有一定程度的便利性等 )
然后,也陆续发展出测试、除错工具,甚至是设计不同平台开发环境所需的套件,
尤其针对不同平台,更是设计了对应的工具来协助开发、除错;
SDK 名词之所以出现,俨然是为了汇整上述这些资源而诞生的,
我想也可以说成是 API 的包含者(直接使用)与应用者(以便加速开发),
也因此可以说这两个是属于不同层级的东西...
以 Android 来说:
a. 我们要拥有 Android SDK 才能开发 Android 应用程式
( 针对不同开发系统而不同 Linux, Windows )
b. Android SDK 里的 APIs 统统都可以单独使用,只不过你会
发现他们都还有许多其他的应用,而且可能还比自己写来得更有效率
c. Android SDK 跟开发环境整合后,除了提供程式码语法错误检查外,
还提供模拟器平台让我们不需要硬体就可以模拟测试
d. Android SDK 内有测试用的 APIs,来协助我们检查记忆体用量、
程式效能以及状态显现等功能 ( 当然它建议仅在测试除错时才使用 )
以 Facebook 来说:
a. 我们要下载 Facebook SDK 才能开发应用程式
( 针对不同开发语言或平台而不同,php, javascript, Android, iOS )
b. Facebook 官网提供 SDK 详细的 APIs 解说与使用方法、范例说明等
c. Facebook 官网提供 线上测试工具,测试某些API的指令与语法
以 Google Map API 来说:
网页开发,只需使用 Google Map API 即可在网页上开发、使用其功能
( 但是在 Android, iOS 上开发则另外需要 Google Map SDK 才行 )
由此可知,我们可以清楚知道 API 与 SDK 的定义差别了!按钮进行在线转换本回答被提问者和网友采纳
参考技术B

一、SDK的概念

SDK即“软体开发工具包”,一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。通俗点是指由第三方服务商提供的实现软件产品某项功能的工具包。

通常SDK是由专业性质的公司提供专业服务的集合,比如提供安卓开发工具、或者基于硬件开发的服务等。也有针对某项软件功能的SDK,如推送技术、图像识别技术、移动支付技术、语音识别分析技术等,在互联网开放的大趋势下,一些功能性的SDK已经被当作一个产品来运营。

开发者不需要再对产品的每个功能进行开发,选择合适稳定的SDK服务并花费很少的经历就可以在产品中集成某项功能。

二、API的概念

API即“应用程序编程接口”,是一些预先定义的函数,目的是作为“介面”沟通两个不同的东西,提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

其实就是别人已经写好的可以实现特定功能的函数,而你只需要根据他提供好的接口,也就是调用他的方法,传入他规定的参数,然后这个函数就会帮你实现这些功能。

从接口interface来说,在计算机领域是指两个不同事物之间交互的地方,大可以到两个完整的不同系统,小可以到两段程序。所以这个I就这么理解。在这个基础上,人和程序交互的地方,叫做UI,user interface,所有人输入的包括鼠标键盘触摸屏声音输入都算。那么程序和程序交互的就叫做API,所有非人对非人交互都通过API进行交互,所谓交互,其实就是传递数据,触发功能。

三、SDK和API的区别

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

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

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

参考技术C API:对外提供的服务,一般可能颗粒较小,因为需要考虑服务的复用。
SDK:一个简单的服务消费者,一般SDK=多个API集成+客户端会话属性等,更加趋近消费者业务逻辑,如应用内计费SDK需要兼顾多API调用、安全控制、不可代替的二次确认界面

因此,两者的区别主要体现在服务使用的开发过程,SDK可能简单些,原生API可能复杂点,但是SDK本身可能存在问题,如SDK的一些基础能力的实现(如网络)并不完美,或者SDK中的界面与你的UI风格不一致!
参考技术D 总的来说,两者没有值得比较的区别,因为是具有关联性的两种东西。
你可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API。
比如——
我们现在要在企业ERP系统中增加某个功能(比如自动备份、数据分析、云存储等),但又不想耗费大量时间、也没那么多研发亲自去做这个功能。这时我们可以选择使用这个“SDK”软件包,把ERP系统连接上API接口,就可以使用SDK软件包里的功能。

API的分类

API和SDK的区别

API=Application Programming Interface, 应用程序编程接口
SDK=Software Development Kit,软件开发包
二者关键的区别在于 接口和包 上
SDK一定定义了接口,但API不一定有包
比如Windows SDK里面包含了各种lib、dll

API的分类

个人理解,API大致分为两类
一类是基于源码的接口
一类是基于协议的接口

基于源码的接口

  • 场景
    • 进程内的接口一般都会采用此类接口
    • 当接口需要跨进程控制,且通信为私有协议,一般会采用此类接口
    • 为了降低二次开发门槛,也会采用此类接口
  • 提供形式
    • 一般来说,这类接口都是以C/C++提供,因为其它语言也有机制调用
    • 接口会提供头文件、lib、dll(a或so)
  • 优点
    • 可以让开发者调用更加方便
    • 一般底层协议都是双工协议,可以更好的做服务器推送
  • 缺点
    • 维护成本增加
    • 需要考虑各种跨平台处理
    • 升级需要考虑各种兼容问题

基于协议的接口

  • 场景
    • C/S B/S等跨进程通信模型
    • 服务器可以对外提供标准通信协议
  • 提供形式
    • 通过标准的通信协议+编码协议来制定接口
    • 目前比较多的组合就是Http+Json 或 Http+Xml
    • 当然还有grpc使用的http2+pb
  • 优点
    • 更加的开放,比较适应当前互联网的开发模式
    • 更多的关注放到服务端
    • 可以更好的升级
  • 缺点
    • Http本身问题,推送比较麻烦
    • 二次开发者需要自己处理客户端逻辑

其它延伸

  • 关于RESTFul和RPC
    • 经常听到的RESTFul的API,是用于规范通信协议的使用
      • 操作需要严格遵循POST GET PUT DELETE
      • URL需要保证每个URL代表一个对象或一类对象,不能包含动词
    • RPC是用于C/S或B/S之间的调用规范
      • google的grpc
      • facebook的thrift

原文:大专栏  API的分类


以上是关于sdk跟api的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

API和SDK的区别

屏幕坐标跟窗口坐标的区别是啥?

WCF,WebAPI,WCFREST和WebService的区别

SDK接口与API接口究竟有什么区别?

软件包,API,SDK的区别

API和SDK是什么?有什么区别?如何测试SDK?