API 与 SPI

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 只是被动接受信息,不能对主流程产生影响。

转载于:https://my.oschina.net/liufq/blog/3011988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值