Knowledge Base

An archive of my personal knowledge base.

API vs SPI

Cristian Sulea

API stands for Application Programming Interface, and is a mean for accessing a service/function provided by some kind of software or a platform. API is normally target for clients to access a service and its has the following properties:

  • API is a programmatic way of accessing a service to achieve a certain behavior or output.
  • From API evolution point of view, addition is no problem at all for clients.
  • But API's once utilized by clients it can not (and should not) be altered / deleted unless there are an appropriate communications, since its a complete degradation of the client expectation.

SPI stands for Service Provider Interface, and is way to inject, extend or alter the behavior for software or a platform. SPI is targeted for providers and has the following properties:

  • SPI is a way to extend / alter the behavior of a software or a platform (programmable vs. programmatic).
  • SPI evolution is different that SPI evolution, in SPI removal is not an issue.
  • Addition of SPI interfaces will cause problems and may break existing implementations.

Put differently, the API tells you what a specific class/method does for you and the SPI tells you what you must do to conform. So:

  • the API is the description of classes/interfaces/methods/... that you call and use to achieve a goal
  • the SPI is the description of classes/interfaces/methods/... that you extend and implement to achieve a goal

Usually API and SPI are separate. For example in JDBC the Driver class is part of the SPI: if you simply want to use JDBC, you don't need to use it directly, but everyone who implements a JDBC driver must implement that class.

Sometimes they overlap, however. The Connection interface is both SPI and API: you use it routinely when you use a JDBC driver and it needs to be implemented by the developer of the JDBC driver.


Resources

Share on Twitter