Difference between an API and SDK
I am trying to explain to a non-developer the difference between an API an SDK. I need to explain why a commercial fingerprint software vendor will likely not provide an SDK, although they may certainly have used one.
Both device vendors and software vendors can and should expose a well-defined API. This API allows other software programs to (be written to) inter-operate with the vendor’s own software components or hardware devices.
If someone has more ideas to explain this clearly, I would very much appreciate the suggestions. I want to emphasize that the goal is to explain the concepts to a non-programmer who does not know developer lingo.
Specifically, in the context of a fingerprint sensor versus software to do enrollment/verification, here is how I attempted to explain it:
If I am a fingerprint device/sensor manufacturer and not in the business of writing software, the ways I could better market my product are:
- Make sure my device drivers are installable on a wide variety of operating systems
- Define and provide an API for software developers to write programs (e.g., for enrollment, verification) to “talk” to or use my device
- Develop and provide an SDK (one step beyond an API) to make it easier and faster for software developers to write programs that work with my device. SDKs may provide helper code libraries, reference applications, documentation etc.
Piece of cake:
- an API is an interface. It's like the specification of the telephone system or the electrical wiring in your house. Anything* can use it as long as it knows how to interface. You can even buy off-the-shelf software to use a particular API, just as you can buy off the shelf telephone equipment or devices that plug into the AC wiring in your house.
- an SDK is implementation tooling. It's like a kit that allows** you to build something custom to hook up to the telephone system or electrical wiring.
*Anything can use an API. Some APIs have security provisions to require license keys, authentication, etc. which may prohibit complete use of the API in particular instances, but that's only because particular authentication/authorization steps fail. Any software that presents the right credentials (if required) can use the API.
**Technically, if an API is well-documented, you don't need an SDK to build your own software to use the API. But having an SDK generally makes the process much easier.
API is like the building blocks of some puzzling game that a child plays with to join blocks in different shapes and build something they can think of.
SDK, on the other hand, is a proper workshop where all of the development tools are available, rather than pre-shaped building blocks. In a workshop you have the actual tools and you are not limited to blocks, and can therefore make your own blocks, or can create something without any blocks to begin with.
coding without an SDK or API is like making everything from scratch without a workshop - you have to even make your own tools
Suppose company C offers product P and P involves software in some way. Then C can offer a library/set of libraries to software developers that drive P's software systems.
That library/libraries are an SDK. It is part of the systems of P. It is a kit for software developers to use in order to modify, configure, fix, improve, etc the software piece of P.
If C wants to offer P's functionality to other companies/systems, it does so with an API.
This is an interface to P. A way for external systems to interact with P.
If you think in terms of implementation, they will seem quite similar. Especially now that the internet has become like one large distributed operating system.
In purpose, though, they are actually quite distinct.
You build something with an SDK and you use or consume something with an API.
Application Programming Interface is a set of routines/data structures/classes which specifies a way to interact with the target platform/software like OS X, Android, project management application, virtualization software etc.
While Software Development Kit is a wrapper around API/s that makes the job easy for developers.
For example, Android SDK facilitates developers to interact with the Android platform as a whole while the platform itself is built by composite software components communicating via APIs.
Also, sometimes SDKs are built to facilitate development in a specific programming language. For example, Selenium web driver (built in Java) provides APIs to drive any browser natively, while capybara can be considered an an SDK that facilitates Ruby developers to use Selenium web driver. However, Selenium web driver is also an SDK by itself as it combines interaction with various native browser drivers into one package.
I'm not sure there's any official definition of these two terms. I understand an API to be a set of documented programmable libraries and supporting source such as headers or IDL files. SDKs usually contain APIs but often often add compilers, tools, and samples to the mix.