API 与 SPI

原创
2019/02/19 16:16
阅读数 121

API 是 应用编程接口(Application Programing Interface) , 是为调用方提供服务或函数的一种方法。 SPI 是 服务提供接口(Service Provider Interface), 是为第三方扩展功能的一种方法。

API 是系统与外部交流的窗口。SPI 是系统为第三方留的后门。

很多时候一个应用可能既是client 也是 provider,那么API 与SPI 的分界就很模糊,我们需要从 API 与 SPI 的不同属性上来区分。

API 的属性

  • 提供给调用方某种能力
  • 添加 API 对调用方没有影响
  • 修改或删除 API 影响很大
  • 用来调用

SPI 的属性

  • 提供给服务方扩展系统能力的能力
  • SPI 的删除对调用方没有影响,只会影响服务方
  • SPI 的添加可能会产生问题(多了一步拦截)
  • 用来实现

将 API 与 SPI 混在一起通常不是一个好主意。但有时这两者区分没有那么清晰,需要我们在设计时仔细考虑。(最近做的一个对rocketmq 的封装按照这个观点来看就是一个不合格的产品)

API 比较常见,SPI 再多说一点。

在java 中, SPI 使用的方式有:

  • jdbc
  • jndi
  • Java Cryptography Extension
  • Java API for XML Processing

这几种大家都见过,平常自己也会写插件式架构,SPI 就是一个绕不过去的概念。要实现一个插件式架构,需要几方面:

  • registry
  • interface
  • interface 调用点
  • implementation

这与事件的要素一致,只不过插件式架构中的interface 是会对功能产生影响的,而事件中的listener 只是被动接受信息,不能对主流程产生影响。

展开阅读全文
spi
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部