# Programmierschnittstelle

Eine Programmierschnittstelle (auch Anwendungsschnittstelle, genauer Schnittstelle zur Programmierung von Anwendungen), häufig nur kurz API genannt (von englisch application programming interface, wörtlich ‚Anwendungs­programmier­schnittstelle‘), ist ein Programmteil, der von einem Softwaresystem anderen Programmen zur Anbindung an das System zur Verfügung gestellt wird. Im Gegensatz zu einer Binärschnittstelle (ABI) definiert eine Programmierschnittstelle nur die Programmanbindung auf Quelltext-Ebene. Die Bereitstellung einer solchen Schnittstelle beinhaltet in der Regel eine detaillierte Dokumentation der Schnittstellenfunktionen mit ihren Parametern auf Papier oder als elektronisches Dokument.
Neben dem Zugriff auf Datenbanken oder Hardware wie Festplatte oder Grafikkarte kann eine Programmierschnittstelle auch die Erstellung von Komponenten der grafischen Benutzeroberfläche ermöglichen oder vereinfachen. Beispielsweise ermöglicht die Programmierschnittstelle Windows Application Programming Interface des Betriebssystems Windows externen Firmen die Entwicklung von Software für dieses Betriebssystem.
Heutzutage stellen auch viele Online-Dienste Programmierschnittstellen zur Verfügung; diese heißen dann Webservice. Im weiteren Sinne wird die Schnittstelle jeder Bibliothek (englisch library) als Programmierschnittstelle bezeichnet. Zu unterscheiden ist diese Art funktionaler Programmierschnittstellen von den vielen anderen Schnittstellen, die in der Programmierung angewendet werden – zum Beispiel die Parameter, die beim Aufruf von Unterprogrammen vereinbart und übergeben werden.

## Einteilung nach Typklassen

Programmierschnittstellen lassen sich in folgende Typklassen einteilen:
* funktionsorientiert (z. B. Dynamic Link Library)
* dateiorientiert (z. B. Gerätedateien unter Unix)
* objektorientiert (z. B. ActiveX-DLLs)
* protokollorientiert (z. B. FTP)

### Funktionsorientierte Programmierschnittstellen

Funktionsorientierte Programmierschnittstellen kennen nur Funktionen mit oder ohne Rückgabewert als Mittel der Kommunikation. Dabei wird fast immer das Konzept der Handles verwendet. Man ruft eine Funktion auf und bekommt ein Handle zurück. Mit diesem Handle lassen sich weitere Funktionen aufrufen, bis abschließend das Handle wieder geschlossen werden muss.

### Dateiorientierte Programmierschnittstellen

Dateiorientierte Programmierschnittstellen werden über die normalen Dateisystemaufrufe open, read, write und close angesprochen. Sollen Daten an ein Objekt gesendet werden, werden diese mit write geschrieben, sollen welche empfangen werden, werden sie mit read gelesen. Unter UNIX ist dieses Prinzip bei der Ansteuerung von Gerätetreibern weit verbreitet.

### Objektorientierte Programmierschnittstellen

Objektorientierte Programmierschnittstellen verwenden Schnittstellenzeiger und sind damit deutlich flexibler als die funktionsorientierten Programmierschnittstellen. Häufig wird eine Typbibliothek mitgegeben.

### Protokollorientierte Programmierschnittstellen

Protokollorientierte Programmierschnittstellen sind unabhängig vom Betriebssystem und der Hardware. Allerdings muss das Protokoll stets neu implementiert werden. Um diesen Aufwand zu minimieren, wird die protokollorientierte Schnittstelle durch eine funktions- oder interfaceorientierte Schnittstelle gekapselt. Man kann hier weiterhin zwischen allgemeinen (z. B. SOAP) und anwendungsspezifischen (z. B. SMTP)-Protokollen unterscheiden.

## Einteilung nach Entwicklungsstufen

Bei Programmierschnittstellen für Anwendungssoftware wird darüber hinaus auch nach Entwicklungsstufe unterschieden. Ausgangspunkt dieser Unterscheidung ist die Beobachtung, dass sich Operationen der Programmierschnittstelle oft erst im Laufe der Zeit herausentwickeln. Von großer Wichtigkeit ist dabei, ob in früheren Versionen der Programmierschnittstelle verfügbare Operationen auch in allen Folgeversionen noch vorhanden sind und auch dieselbe Bedeutung haben. Bei einer stabilen Schnittstelle braucht die Anwendung nicht mehr geändert zu werden. Unterschieden wird zwischen sich entwickelnden (engl. evolving) und stabilen Programmierschnittstellen (engl. stable API). Als Refactoring wird die Fortentwicklung einer Programmierschnittstelle bezeichnet, die keine Änderungen in den Anwenderprogrammen nach sich zieht.

## Bedeutung

Das Vorhandensein einer gut dokumentierten Programmierschnittstelle (API) kann ein erheblicher Wettbewerbsvorteil für ein Software- oder ein die Software enthaltendes Hardware-Produkt sein – da auf diese Weise andere Softwarefirmen oder freiberufliche Programmierer in die Lage versetzt werden, zusätzliche Software für dieses System zu erstellen. Mit dem Angebot zusätzlicher Programme von Drittanbietern steigt wiederum die Attraktivität des Ausgangssystems, etwa eines Computer-Betriebssystems, einer Spielkonsole oder einer Smartphone-Familie. Die Geschäftspolitik bezüglich dieser Schnittstelle kann damit über den kommerziellen Erfolg einer Software und gegebenenfalls auch der zugehörigen Hardware entscheiden. So verlangen manche Software-Anbieter erhebliche Geldbeträge für die zugehörige, notwendige Dokumentation, was eine Eintrittsbarriere für interessierte Programmierer darstellt. Auch kann vorgesehen sein, dass auf die API nur mit einem teuer zu erwerbenden Software-Entwicklungssystem zugegriffen werden kann.
Ein weiterer Erfolgsfaktor kann die bereits erwähnte Langzeitstabilität der API sein, denn bei häufigen Änderungen ist auch der Programmierer einer Zusatzanwendung gezwungen, seine Software jedes Mal anzupassen, damit sie weiterhin funktioniert. Dies kann erheblichen Aufwand und damit Kosten verursachen, was die Entwicklung kommerziell unattraktiv macht.

### Beispiele

Die Entwicklungsumgebung Xcode, mit der auf die API des Smartphone-Betriebssystems Apple iOS zugegriffen werden kann, steht zwar als kostenloser Download bereit, aber nur für Mac-Computer von Apple. Zudem müssen Entwickler ein Geheimhaltungsabkommen unterzeichnen und einen Mitgliedsbeitrag entrichten, was als Hemmnis bewertet wird – zumal Apple auf dem Markt für Smartphones bzw. Mobile Apps durch den großen Erfolg des Android-Betriebssystems mit starker Konkurrenz konfrontiert ist.
Für die Betriebssystem-Familie Unix existiert der von der IEEE festgelegte POSIX-Standard. Die Preise für die Dokumentation dieser API sind sehr hoch, und die Veröffentlichung ist durch Urheberrecht untersagt. In neuerer Zeit ist deshalb eine Tendenz zur Single UNIX Specification der Open Group zu verzeichnen. Diese Standards sind offen, im Internet frei verfügbar und alle können Vorschläge dazu einreichen.