“Knowledge is of two kinds. We know a subject ourselves, or we know where we can find information on it.” ― Samuel Johnson
API, or Application Programming Interface, has re-entered the halls of software industry buzzwords over the past few years. The current incarnation of API is specifically referring to “Web API” which is taking up the mantle from Service-Oriented Architecture’s (SOA) SOAP Web Service influence and takes advantage of core World Wide Web (WWW) technologies to facilitate partnerships of information sharing and modern composite applications. Product and business stakeholders may not understand the technical details underlying this modern take on API, but they can appreciate the tremendous opportunity that ready-access to shared functionality, multiple-party data and simple composition of applications affords. As technologists, we sometimes become too focused on the purity of a technical approach or solution when encountering a new paradigm and lose sight of where the real value lies in our creations. As such, I thought a review of the definition, types and history of API, independent of current web styles, would be beneficial to not only know how we got here, but also to more deeply understand what is truly required so we can fight through the hype, set expectations and understand the hallmarks of a world class API.
Per the current Wikipedia definition, an API is:
a set of routines, protocols, and tools for building software applications. An API expresses a software component in terms of its operations, inputs, outputs, and underlying types. An API defines functionalities that are independent of their respective implementations, which allows definitions and implementations to vary without compromising each other. A good API makes it easier to develop a program by providing all the building blocks. A programmer then puts the blocks together.
– Wikipedia January 2015
Simply put, APIs are a way for one software component to access another for function and/or data sharing through a well-defined agreement. While the Wikipedia definition is a typical definition-by-committee, there are some excellent points we can parse to get to the heart of what APIs are all about. It contains the obligatory points about representation of behavior, defined access, and parameters such as inputs, outputs and types (data). It also makes the point that APIs provide isolation between the consumers and the implementation to increase durability and supportability. The most important part, however, is the expression of what a “good API” is – it provides building blocks that a programmer can put together to develop a program. This is not dependent upon the technology supporting the protocol or even if the API provides access to procedural systems or to databases or to hardware devices (via a device driver interface, of course). An API is good if it can be composed into something more useful. There are many considerations required to support that characteristic, but it stands as a useful hallmark of “goodness”.
What Are APIs Good For?
For me, APIs are how you stand on the shoulders of others to assemble something grander than you could have accomplished alone in the same timeframe. We see this in all modern programming as we leverage the APIs of operating systems, frameworks, virtual platforms or third-parties to build complex applications. When you are trying to provide innovative, productive business solutions, there is no time and, really, no reason to build all your capabilities from scratch, especially if they are common capabilities that will not add unique value or they are highly specialized capabilities and resources that are best built once, then managed in one place by specialists. APIs provide a way to describe and encapsulate those common and valuable capabilities so they can be used and reused in many scenarios.
APIs have become even more important in today’s prolific digital economy to not only foster the reuse that boosts productivity and reduces risk, but, more importantly, to leverage resources you do not have. The ability to aggregate data and compose processes sourced across disparate systems, or even other parties, has long been a goal of the software industry. Developing the capabilities to achieve this easily, effectively and securely with APIs opens a whole new world of opportunity. If achieved, APIs stand to provide the glue and fuel to build a limitless ecosystem around valuable sets of core resources. This in turn creates unimagined opportunities for entirely new business models that position APIs to be not only a means to an end, but the product itself.
In future posts, I will identify the types, then examine their history so that we can build toward an understanding of the essence of APIs, how we got where are today in the industry and perhaps glimpse remaining needs that warrant continuing innovation.