概念区分:API SPI SDK

API

API (Application Programming Interface)在大多数情况下,都是实现方制定接口并完成对接口的实现,调用方仅仅依赖接口调用,且无权选择不同实现。
在这里插入图片描述
图源:Java基础之SPI机制
例如,厂商将自己的提供的服务写成接口,提供给其他开发人员使用。开发人员只需要调用相关接口,而不需要了解内部是什么。相当于我想实现什么功能我就调一下。

SPI

SPI(Service Provider Interface),是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。
在这里插入图片描述
图源:Java基础之SPI机制
例如,我调用数据库的一些增删改查接口,但是不同的数据库底层实现机制可能不同,驱动程序也有不同。这就需要数据库厂商自己去实现自己的数据库驱动逻辑,我们只需要调用接口,不需要关心具体实现细节以及不同厂商之间的区别。
举例:高级开发必须理解的Java中SPI机制
实际上是基于接口的编程+策略模式+配置文件组合实现的动态加载机制。调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。
例子:

  • 数据库驱动加载接口实现类的加载
  • 日志门面接口实现类加载
  • Spring中大量使用了SPI
  • Dubbo中大量使用了SPI

SDK

SDK(Software Development Kit)即软件开发工具包 ,就是帮助我们开发出软件的工具集合,除了代码之外,一般还要搭配文档、示例等。
在这里插入图片描述

一般SDK都是需要引入到项目中使用的,比如JDK就是Java Development Kit,是一套用来开发Java的工具包,通过import语句来引入这个工具包。
SDK中可能提供很多的API供开发者使用。例如JDK中提供了很多用于IO处理(java.io)、容器工具(如java.util.concurrent)等,Windows SDK提供了很多Windows开发的相关工具和文档。
使用SDK的好处是,相当于复用别人的轮子,那么就对SDK的提供者需要有一些要求,如:命名简洁、统一风格、注释清晰、轻度依赖、可扩展、升级兼容、迁移平滑等等。
SDK除了包括提供的API,还包括运行/开发环境、编译器、调试器、测试分析工具等等。SDK的唯一访问入口是API,可以把SDK简单地理解为打包了一系列API的工具包。

参考

SDK 和 API 的区别是什么?
Java基础之SPI机制
大厂的 SDK 写法,偷学到了!
高级开发必须理解的Java中SPI机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值