A frequent question from people who have an existing SDK is “Do I need an API?”
First, what do we mean by “SDK” and “API”?
An SDK, software development kit, is usually compiled code that is distributed to developers to embed on local devices.
An API, application programming interface, is a set of operations exposed for invocation by a remote system. (For the purposes of this discussion, we will keep the definition of an API at this high level and not delve into REST vs SOAP, good API design, etc.).
These days, SDKs are generally used when specialized processing will need to be done on the remote device. Some examples of this might be speech recognition or 3D graphics. Making these calls remotely could be expensive or impractical. Some people distribute SDKs when there doesn’t seem to be a compelling reason (specialized processing). In these situations, all would be better served by the existence of an exposed API.
An API provides a stable interface that, like any good software architecture, hides the ever changing back-end implementation from front-end developers. API providers generally provide a dedicated web site containing the details of the API and all documentation. Since nothing needs to be distributed, an API is logistically easier and also eases the burden of compilation against multiple OS and hardware platforms.
Even if you provide an SDK, you probably still need an API.
(Remember, in this context, an API is a remotely exposed interface, not the set of functions in the SDK).
In today’s world, almost every application will need to communicate with remote servers, mash together other data, connect with social networks, etc….
While the SDK can be effective for building the application and performing specialized processing on the device, that application still needs to work with these remote services.
Having a well managed API exposed between the applications and your back-end provides many benefits (logging, security, policy enforcement, caching, pagination, transformation,…).
There is no reason that an SDK and API need to be mutually exclusive. While you should probably default to the use of an API whenever possible, SDKs and APIs can be friends when the situation calls for it.