Application programming interface
An
application programming interface (
API) is the
interface that a computer system, library or application provides in order to allow requests for services to be made of it by other computer programs, and/or to allow data to be exchanged between them.
One of the primary purposes of an
API is to describe how computer applications and software developers may access a set of (usually third party)
functions (for example, within a library) without requiring access to the source code of the functions or library, or requiring a detailed understanding of the functions' internal workings. The software which provides the functionality described by the API is said to be an
implementation of the API. The API itself is
abstract, as it is an interface. A
reference implementation of an API is the implementation created by the designer of the API, or one which other implementations of the API are expected to be compared against.
For example, an API might describe how an application may call an
icon-drawing function within a graphics
library, for displaying icons in the screen. A programmer can write a program which calls the icon-drawing function described in the API. When compiled the compiler will link against the API. When executed, the program will use the implemention of the API (a library) to draw the icon.
Computer programs often use the
operating system's API to allocate memory and access files. Many types of systems and applications provide and implement APIs, such as graphics systems, databases, networks, web services, and even some computer games.
In many instances, an API is often a part of a
Software development kit (SDK). An SDK may include an API as well as other tools and perhaps even some hardware, so the two terms are not strictly interchangeable.
There are various design models for APIs. Interfaces intended for the fastest
execution often consist of sets of
functions,
procedures,
variables and
data structures. However, other models exist as well, such as the
interpreter used to evaluate expressions in
ECMAScript/
JavaScript or in the abstraction layer, which relieves the programmer from needing to know how the functions of the API relate to the lower levels of abstraction. This makes it possible to redesign or improve the functions within the API without breaking code that relies on it.
Two general lines of policies exist regarding publishing APIs:
# Some companies guard their APIs zealously. For example,
Sony used to make its official
PlayStation 2 API available only to licensed PlayStation developers. This is because Sony wanted to restrict how many people could write a PlayStation 2
game, and wanted to profit from them as much as possible. This is typical of companies who do not profit from the sale of API implementations (in this case, Sony broke-even on the sale of PlayStation 2 consoles and even took a loss on
marketing, instead making it up through game royalties created by API
licensing). However,
PlayStation 3 is based entirely on open and publicly available APIs.# Other companies propagate their APIs freely. For example,
Microsoft deliberately makes most of its API information public, so that software will be written for the Windows
platform. The sale of the third-party software sells copies of Microsoft Windows. This is typical of companies who profit from the sale of API implementations (in this case,
Microsoft Windows, which is sold at a gain for Microsoft).
Some APIs, such as the ones standard to an
operating system, are implemented as separate
code libraries that are distributed with the operating system. Others require
software publishers to integrate the API functionality directly into the application. This forms another distinction in the examples above. Microsoft Windows APIs come with the operating system for anyone to use. Software for
embedded systems such as
video game consoles generally falls into the application-integrated category. While an official PlayStation API document may be interesting to read, it is of little use without its corresponding
implementation, in the form of a separate
library or
software development kit.
An API that does not require royalties for
access and
usage is called "open." The APIs provided by
Free software (such as all software distributed under the
GNU General Public License, for example glibc), are open by definition, since anyone can look into the
source of the software and figure out the API. Although usually authoritative "
reference implementations" exist for an API (such as
Microsoft Windows for the
Win32 API), there's nothing that prevents the creation of additional implementations. For example, most of the Win32 API can be provided under a
UNIX system using software called
Wine.
It is generally lawful to analyze API implementations in order to produce a compatible one. This technique is called
reverse engineering for the purposes of
interoperability. However, the legal situation is often ambiguous, so that care and
legal counsel should be taken before the reverse engineering is carried out. For example, while APIs usually do not have an obvious legal status, they might include
patents that may not be used until the patent holder gives permission.
*
Application binary interface (ABI)
*
Ontology (computer science)*
Open Service Interface Definitions (OSID)
*
Plugin*
Document Object Model*
Web serviceSome example APIs
* The PC
BIOS call interface*
Single UNIX Specification (SUS)
*
Microsoft Win32 API*
Java Platform, Enterprise Edition APIs
*
ASPI for
SCSI device interfacing
*
Carbon and
Cocoa for the
Macintosh OS*
DirectX for
Microsoft Windows*
Simple DirectMedia Layer (SDL)
*
Universal Home API*
LDAP Application Program Interface*
svgalib for
Linux and
FreeBSD*
Google Maps API*
World of Warcraft API*
How to design a good API and why it matters-PDF*
gotAPI: Searchable API Aggregation Service