Libraries and frameworks The interface to a
software library is one type of API. The API describes and prescribes the "expected behavior" (a specification) while the library is an "actual implementation" of this set of rules. A single API can have multiple implementations (or none, being abstract) in the form of different libraries that share the same programming interface. The separation of the API from its implementation can allow programs written in one language to use a library written in another. For example, because
Scala and
Java compile to compatible
bytecode, Scala developers can take advantage of any Java API. API use can vary depending on the type of programming language involved. An API for a
procedural language such as
Lua could consist primarily of basic routines to execute code, manipulate data or handle errors while an API for an
object-oriented language, such as Java, would provide a specification of classes and its
class methods. Meanwhile, several studies show that most applications that use an API tend to use a small part of the API.
Language bindings are also APIs. By mapping the features and capabilities of one language to an interface implemented in another language, a language binding allows a library or service written in one language to be used when developing in another language. Tools such as
SWIG and F2PY, a
Fortran-to-
Python interface generator, facilitate the creation of such interfaces. An API can also be related to a
software framework: a framework can be based on several libraries implementing several APIs, but unlike the normal use of an API, the access to the behavior built into the framework is mediated by extending its content with new classes plugged into the framework itself. Moreover, the overall program flow of control can be out of the control of the caller and in the framework's hands by
inversion of control or a similar mechanism.
Operating systems An API can specify the interface between an application and the
operating system.
POSIX, for example, specifies a set of common APIs that aim to enable an application written for a POSIX conformant operating system to be
compiled for another POSIX conformant operating system.
Linux and
Berkeley Software Distribution are examples of operating systems that implement the POSIX APIs. Microsoft has shown a strong commitment to a backward-compatible API, particularly within its
Windows API (Win32) library, so older applications may run on newer versions of Windows using an executable-specific setting called "Compatibility Mode". How much Microsoft developers' access to the company's operating systems' internal APIs is an advantage is unclear. Richard A. Shaffer of
Technologic Computer Letter in 1987 compared the situation to a baseball game in which "Microsoft owns all the bats and the field", and large vendors like
Lotus Development and
Ashton-Tate reportedly received information about
MS-DOS 5.0 that smaller software developers did not.
Ed Esber of Ashton-Tate said in a 1987 interview, however, that
Bill Gates told him that his developers sometimes had to rewrite software based on early APIs. Gates noted in the interview that Microsoft's
Apple Macintosh applications were more successful than those for MS-DOS, because his company did not have to also devote resources to
Mac OS. An API differs from an
application binary interface (ABI) in that an API is source code based while an ABI is
binary based. For instance,
POSIX provides APIs while the
Linux Standard Base provides an ABI.
Remote APIs Remote APIs allow developers to manipulate remote resources through
protocols, specific standards for communication that allow different technologies to work together, regardless of language or platform. For example, the Java Database Connectivity API allows developers to query many different types of
databases with the same set of functions, while the
Java remote method invocation API uses the Java Remote Method Protocol to allow
invocation of functions that operate remotely, but appear local to the developer. Therefore, remote APIs are useful in maintaining the object abstraction in
object-oriented programming; a
method call, executed locally on a
proxy object, invokes the corresponding method on the remote object, using the remoting protocol, and acquires the result to be used locally as a return value. A modification of the proxy object will also result in a corresponding modification of the remote object.
Web APIs Web APIs are the defined interfaces through which interactions happen between an enterprise and applications that use its assets, which also is a
Service Level Agreement (SLA) to specify the functional provider and expose the service path or URL for its API users. An API approach is an architectural approach that revolves around providing a program interface to a set of services to different applications serving different types of consumers. When used in the context of
web development, an API is typically defined as a set of specifications, such as
Hypertext Transfer Protocol (HTTP) request messages, along with a definition of the structure of response messages, usually in an Extensible Markup Language (
XML) or JavaScript Object Notation (
JSON) format. An example might be a shipping company API that can be added to an eCommerce-focused website to facilitate ordering shipping services and automatically include current shipping rates, without the site developer having to enter the shipper's rate table into a web database. While "web API" historically has been virtually synonymous with
web service, the recent trend (so-called
Web 2.0) has been moving away from Simple Object Access Protocol (
SOAP) based web services and
service-oriented architecture (SOA) towards more direct
representational state transfer (REST) style
web resources and
resource-oriented architecture (ROA). Part of this trend is related to the
Semantic Web movement toward
Resource Description Framework (RDF), a concept to promote web-based
ontology engineering technologies. Web APIs allow the combination of multiple APIs into new applications known as
mashups. In the social media space, web APIs have allowed web communities to facilitate sharing content and data between communities and applications. In this way, content that is created in one place dynamically can be posted and updated to multiple locations on the web. For example, Twitter's REST API allows developers to access core Twitter data and the Search API provides methods for developers to interact with Twitter Search and trends data. ==Design==