第一次接触编程时,你可能会遇到几个经常出现的词:
API SDK 插件 库 框架
它们都和软件功能的复用、接入或扩展有关,但解决的问题并不一样。
程序员可能会说:
❝“这个功能需要调用 API。”
❞
也可能会说:
❝“直接用官方 SDK 接入吧。”
❞
还有时候,他们会建议:
❝“安装一个插件就可以了。”
❞
这些话对于初学者来说很容易混淆。
今天我们就用一个天气 App 来理解三个最常见的概念:
❝「API 是通信通道,SDK 是开发工具包,插件是软件扩展。」
❞
一、先看一个天气 App
假设你正在开发一个天气 App。
用户打开 App 后,希望看到:
当前温度; 天气状况; 空气质量; 未来几天的天气预报; 日出和日落时间。
但这些数据通常不在你的 App 里,而是在天气服务商的服务器上。
因此,你的 App 需要向天气服务商请求数据:
App 发送请求; 天气服务接收请求; 服务器查询天气数据; 服务器返回结果; App 把结果展示给用户。
在这个过程中:
「API」 规定 App 如何获取天气数据; 「SDK」 帮助开发者更方便地接入天气服务; 如果其他软件想增加天气功能,则可以通过「插件」进行扩展。
二、API:获取天气数据的通道
API 是 「Application Programming Interface」 的缩写,中文通常翻译为“应用程序编程接口”。
简单来说:
❝「API 是不同软件之间约定好的通信方式。」
❞
在天气 App 中,API 就是 App 获取天气数据的通道。
你的 App 可能向天气服务发送这样的请求:
ounter(linehttps://api.weather.example.com/current?city=zhengzhou
天气服务收到请求后,返回一段数据:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line{"city": "郑州","temperature": 25,"weather": "晴","humidity": 40}
App 再把这些数据转换成用户能看懂的界面:
❝郑州晴25℃湿度 40%
❞
你看到的这个网址,只是 API 的一个访问入口。API 的核心并不是网址本身,而是背后约定好的通信规则。
这些规则会说明:
请求应该发送到哪里; 需要提供哪些参数; 返回的数据是什么格式; 出错时会返回什么信息。
天气服务背后的服务器,则负责接收请求、查询数据并返回结果。
它通常不会关心你的 App 长什么样,也不会帮你设计按钮、颜色和页面布局。
所以,API 的核心可以概括为:
❝「一套让程序能够使用另一个程序功能的约定。」
❞
三、SDK:开发者使用的工具包
SDK 是 「Software Development Kit」 的缩写,中文通常翻译为“软件开发工具包”。
简单来说:
❝「SDK 通常是服务商或平台方提供给开发者的一整套工具,用来更方便地接入某项功能。」
❞
当然,你可以不使用 SDK,直接根据 API 文档自己编写代码。
但这样可能需要自己处理:
拼接请求地址; 添加身份验证信息; 发送网络请求; 解析返回数据; 处理网络错误; 转换数据格式。
如果天气服务商提供了 SDK,使用方式可能类似下面这样。这里的代码只是一个简化的示意:
ounter(lineconst weather = await weatherSDK.getCurrentWeather("郑州");
SDK 会在背后帮你完成很多重复工作。
因此:
❝「API 是通信规则,SDK 是帮助开发者使用这些规则的工具包。」
❞
SDK 通常会封装 API,但它不一定只包含 API 调用,也可能包括:
示例代码; 开发文档; 类型定义; 调试工具; 错误处理功能。
四、插件:给已有软件增加能力
插件和 API、SDK 的作用不太一样。
插件通常是:
❝「附加到已有软件中的扩展程序,用来增加原本没有的功能。」
❞
假设你已经有一个天气 App,但它原本只能显示当前温度。
现在你想增加:
降雨提醒; 空气质量地图; 桌面小组件; 户外运动建议; 特殊天气通知。
如果这个 App 支持插件系统,开发者就可以在不重写整个 App 的情况下,通过插件增加新功能。
插件可以理解成什么?
可以把一个软件想象成一台已经组装好的电脑。
插件就像额外安装的功能模块,可以给原来的软件增加新的能力。
常见的插件包括:
浏览器插件:增加网页翻译、广告拦截功能; 编辑器插件:增加代码补全、主题和调试能力; 图片软件插件:增加滤镜和导出格式; 内容管理系统插件:增加评论、支付和 SEO 功能; 游戏插件:增加地图、界面或其他功能。
插件通常依附于一个已有的软件运行,并且需要遵守这个软件规定的扩展规则。
五、API、SDK 和插件有什么区别?
现在可以把三者放在一起比较:
用一句话概括:
❝「API 是通道,SDK 是工具包,插件是扩展。」
❞
它们分别解决不同的问题:
API 解决“程序之间如何通信”; SDK 解决“开发者如何更方便地接入”; 插件解决“如何给已有软件增加功能”。
六、三者可以一起使用吗?
当然可以。
在一个真实项目中,API、SDK 和插件经常会同时出现。
比如,你开发一个天气插件,用来给某个办公软件增加天气提醒功能。
这个插件可能会:
使用天气服务提供的 SDK; SDK 再调用天气服务的 API; 插件把天气数据展示在办公软件里。
它们之间的关系可以表示为:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line天气插件↓天气 SDK↓天气 API↓天气服务
在这个例子中:
「API」 负责提供天气数据; 「SDK」 负责简化 API 的调用过程; 「插件」 负责把天气功能扩展到已有软件中。
所以,“开发一个插件”和“调用一个 API”并不矛盾。
插件是最终扩展到软件中的功能,API 是它获取数据或使用外部服务的方式,SDK 则可能是开发插件时使用的工具。
结语:先看它解决什么问题
API、SDK 和插件并不是三个互相竞争的技术名词。
它们只是从不同角度描述软件之间的协作方式:
❝「API 负责连接,SDK 负责简化开发,插件负责扩展已有软件。」
❞
在天气 App 的例子中:
通过 API 获取天气数据; 使用 SDK 更方便地接入天气服务; 通过插件把天气功能扩展到已有软件中。
以后再看到这些词时,不必先记住复杂的英文全称。只要先判断它解决的是什么问题:
❝是程序之间怎么通信?是开发者如何快速接入?还是给已有软件增加功能?
❞
分清这三个问题,你就能理解 API、SDK 和插件之间最核心的区别。
夜雨聆风