热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

说说API与SDK的异同

看到文章关于API和SDK的理解及两者区别--作者18037128621,文章很好.文章选题很逗引我为此说些什么,深圳这几天大雨,闲着也是闲着,就写一写理一理,算是向作者18037

看到文章 关于API和SDK的理解及两者区别 --作者 18037128621 , 文章很好.

文章选题很逗引我为此说些什么, 深圳这几天大雨, 闲着也是闲着,

就写一写理一理, 算是向作者 18037128621 交流并致敬......

0. 定义

原文作者作者 18037128621 , 写得很好了, 引用如下

SDK: 概念:软件开发工具包(SDK,全称:Software Development Kit) 一般都是一些软件工程师为特定的业务或功能软件包 软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。

API: 概念:API(Application Programming Interface,应用程序编程接口) 一般是指一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

看图, 一图胜千言

上图中, 标蓝1 的地方, 是 API , 标粉2的地方是 SDK , 黄3是中间件SDK与CDN 边缘推流服务器的视频流控

这是一个很多年年以前, 说明电视机顶盒内部如何进行业务集成的示意图:

  1. 左边, 一个 xml portal 提供电视节目单 EPG API 服务, 一个 AAA 提供用户认证/授权/鉴权服务API
  2. 中间, 是一个机顶盒( STB ), 中间有一个业务中间件, 提供了用户相关功能与视频流播放功能, 供给上面的视频APK 使用. 这里就提供了一个中间件的开发 SDK ,为什么提供SDK呢---很简单,商业利益,隐藏了用户接口API中的加密机制, 隐藏了视频快速播放的私密实现, 简化第三方研发的集成复杂度, 以稳定的SDK, 给第三方机顶盒厂商接入到我们的平台,实现互联网电视点播/直播/回看...等业务
  3. 右边, CDN 提供直播/点播的推流服务, 是一个私有推流协议

1. API 详细说明(外部调用/远程调用)

API 一般来说, 是两个网元之间, 一个被调用方( 习惯上称为服务端), 另一个是调用方(习惯上称为客户端) , 两者之间进行业务通讯的业务/信令/数据的约定/规范

换个方式说, API 基本上是两个独立部署的网元之间业务/功能进行外部调用关系的描述

一般来说, API 与开发语言无关 ( 而 SDK 与开发语言关联性比较大), 只要 API 的服务端与客户端能遵从 API 约定, 实现双向通讯并完成指定业务或功能.

通俗来说, 服务端研发开发服务端, 提供API 给客户端研发, 由客户端研发来实现客户端, 与 API 文档约定的服务端共同完成业务.

有兴趣深入的朋友, 可以关注一下 IDD Interface Driven Design接口驱动 / IOC Inversion of Control控制反转

_

_

API 的外在体现, 一般由两部分构成

  1. API文档或叫ICD 文档, 也就是 interface control document 接口控制文档/接口规范文档, 该文档一般定义了客户端对服务端如何寻址, 采用什么通讯协议, 对指定业务如何组织通讯数据并进行交互.

    API文档是供我们写自己的客户端应用的契约/规范文档

  2. 实现 API 服务的服务主体, 也就是, 必须有一个或多个实现 API 被调用侧的同类服务端, 提供了 API 描述的接口服务.

    API服务端是供我们自己的客户端调用 API 的服务端应用

_

_


例1

企业QQ开放平台的 OAuth 2.0授权接口 , 企业QQ 在 RFC 6749 OAuth 2.0 规范下实现了基于 QQ 的企业授权API

  1. QQ开放平台的OAuth API文档在这里
  2. 当然, QQ企业平台提供了对应的 OAuth API 服务部署, 以供调用

注意, QQ 的 OAuth API 实现, 与 RFC 6749有一些细微的实现上的差别


例2

必应 Web 搜索 API 这是 M$ 提供的 bing 搜索API

2. API 的典型例子

RPC(Remote Procedure Call)—远程过程调用中的 IDL 接口定义语言(Interface Definition Language) , 是最典型的 API 案例

在 RPC 中的 IDL 最完整,最规范的定义了 API 中服务端/客户端( 或互为服务端/客户端的双向流式通讯交互) 中的数据与交互方式

API文档/或叫ICD文档, 一般包括3个部分(前2合为文档,后是服务端服务,缺一不可):

  1. 通讯协议, 是采用 TCP / HTTP / HTTP2 / websocket over HTTP / RTMP over UDP ......等等, 客户端与服务端通讯的传输协议
  2. 服务端与客户端之间交互实现的功能或业务说明
  3. 服务端与客户端之间, 进行某项功能或业务实现时, 相互的调用关系, 以及交互数据格式定义(及数据序列化/反序列化实现方式)

_

_


例如 gRPC 中的 protobuffers 定义文件, 能让 java / python / golang / rust / nodeJS / php ... 两两之间实现 API 的服务与调用 ( API 与开发语言无关性 )

  1. gRPC 的通讯协议是 HTTP2
  2. gRPC 的功能或业务, 在 .proto 中以 service 来定义, 说明谁调用谁, 实现什么功能或业务( 注: gRPC 是双向流式交互的 API )
  3. gRPC 默认的数据格式定义采用 protobuffers (即是API中通讯交互数据定义也是序列化/反序列化的具体实现方式), 在 .proto 中分别定义 request / response , 用 proto3 中的 message 来具体定义

_

_


API 就是以 API文档为契约, 供我们写自己的客户端应用, 并远程调用服务端实现业务功能的接口


_

_

3. SDK 的详细说明(内部调用/本地调用)

看了上面的 API 描述, 那么, SDK 就简单了:

SDK 就是一个"本地"独立应用的开发包, 供给开发人员在此开发包基础上, 开发一个独立应用.

换外方式说, SDK 的核心是一个被同一应用其他新增代码"内部调用"的软件包, 例如, 一个DLL 动态连接库

这个新增代码, 一般叫二次开发/上层开发/业务或功能扩展开发, SDK 最终是与在sdk上开发的代码, 合并编译在一起

_

_

SDK 一般分为:

  • 服务端SDK, 帮助开发一个服务端应用
  • 客户端SDK, 帮助开发一个客户端应用
  • 硬件"驱动"SDK, 帮助开发一个基于某个特定硬件之上的应用或服务

换个方式说, SDK 基本上是一个独立部署的网元内部, 相互调用的两部分代码/函数/库之间的业务或功能函数, 以及相互之间的函数调用关系

_

_

多数情况下, SDK 与开发语言相对比较紧密的结合在一起

比如某某的 C++ SDK 即是表示这是供 C++ 调用的一个开发动态或静态链接库. 比如说, SDK提供了c++ 调用示例代码, 以及供C++编译使用的CPP头文件, 编译时静态链接库或动态调用库.

SDK 的外在体现, 一般由几部分构成(接口示例代码及对应的代码库或链接库是必须的)

  1. SDK 代码库或动态/静态链接库, 也就是说, SDK 包括有已经实现部分业务功能或基础业务功能的代码库
  2. SDK 调用代码示例, 一般来说, SDK 包含一些典型示范代码, 告诉我们如何调用 SDK特定的库文件, 告诉我们如何把 SDK 库文件结合我们写的代码编译在一起
  3. SDK 开发文档, 也就是 Software Development document 软件开发文档, 该文档一般定义了 SDK 软件包中包含的业务或功能是如何被调用, 如何进行两部分代码之间的互为调用, 从而在 SDK 代码基础上实现二次开发或上层开发.
  4. 辅助开发工具, 一般是基于这个 SDK 代码库基础上的, 调试/跟踪工具, 模拟测试工具, 代码自动生成工具或检查工具......等辅助提高开发便利性的小工具或辅助代码段, 甚至在 SDK 基础上, 还有紧密结合的IDE 集成开发环境. 例如 windows SDK有名的IDE --- visual studio , android SDK 那个基于 jetbrains idea 上的 android studio, apple的 macOS / ipadOS / IOS 上各SDK 的开发IDE--- xcode

特别注意:

SDK 中的代码库( 静态/动态链接库, 或是不推荐修改的开源代码), 可能与某服务端, 某客户端, 某硬件设备 如蓝牙部件/调制解调器/音视频编解码芯片.....模块进行通讯, 以共同完成某些功能或业务

事实上, SDK 这个概念非常宽泛, 上面我描述到的, 只是比较简单的个人总结性定义.

  1. 有两点是基本统一的, 一是SDK 包含一个代码库或一个编译后可供调用的链接库, 二是SDK 多数情况下, 也实现了某些API, 这些API 可能是显式, 也可以是隐式的实现。
  2. 比如操作系统 Windows有Windows SDK,DirectX 有 DirectX 9 SDK,.NET开发也有Microsoft .NET Framework SDK。JAVA开发也不含糊,也有自己的Java SDK。 Java SDK最早叫Java Software Develop Kit,后来改名为JDK,即Java Develop Kit。JDK作为Java开发工具包,主要用于构建在Java平台上运行的应用程序、Applet 和组件等。

5. API 与 SDK 的关联与区别

_

_

待续.......

_

_

题图说明

题图是我女儿5岁左右拍摄的我, 我头上顶着孩子的手工作品, (我加了两个图标)

背景墙上是女儿3岁以前的涂鸦, 家里所有的墙面被重复又重复画过很多次...

至今天,女儿从出生到现在,陪伴着孩子每一天快乐绘画涂鸦,摄影,旅行,越野...

我保存了 8年多来女儿大部分的涂鸦/摄影.....这是我近10年最快乐的时光!

关于我

网名 tsingson (三明智, 江湖人称3爷)

原 ustarcom IPTV/OTT 事业部播控产品线技术架构湿/解决方案工程湿角色(8年), 自由职业者,

喜欢音乐(口琴,是第三/四/五届广东国际口琴嘉年华的主策划人之一), 摄影与越野,

喜欢 golang 语言 (商用项目中主要用 postgres + golang )

_

_

tsingson 写于中国深圳 小罗号口琴音乐中心, 2019/06/05

转:https://juejin.im/post/5cf68cf4518825401b53c7a0



推荐阅读
  • 本文为转载,原连接:https:www.zhihu.comquestion40822826简单说一下吧做要解释这些要从netconf说起。netconf ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 本文介绍了Android平台各个版本的API级别、版本号以及平台亮点,从Android 1.0到Android 10.0,共涵盖了多个版本的特点和发展历程。详细内容请参考https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element.html。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
wp_725133
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有