Standardisierte Programmierschnittstellen (APIs) über unterschiedliche Betriebssysteme sorgen fürQuelltextkompatibilität, d. h. Quelltext kann ohne Anpassungen für die jeweiligen Systeme erfolgreich kompiliert werden.
EineProgrammierschnittstelle (auchAnwendungsschnittstelle, genauerSchnittstelle zurProgrammierung vonAnwendungen), häufig nur kurzAPI genannt (vonenglischapplication programming interface, wörtlich ‚Anwendungsprogrammierschnittstelle‘), ist ein Programmteil, der von einemSoftwaresystem anderenProgrammen zur Anbindung an das System zur Verfügung gestellt wird. Im Gegensatz zu einerBinärschnittstelle (ABI) definiert eine Programmierschnittstelle nur die Programmanbindung aufQuelltext-Ebene. Die Bereitstellung einer solchen Schnittstelle beinhaltet in der Regel eine detaillierte Dokumentation der Schnittstellenfunktionen mit ihren Parametern auf Papier oder alselektronisches Dokument.
Heutzutage stellen auch vieleOnline-Dienste Programmierschnittstellen zur Verfügung; diese heißen dannWebservice.Im weiteren Sinne wird die Schnittstelle jederBibliothek (englischlibrary) als Programmierschnittstelle bezeichnet. Zu unterscheiden ist diese Art funktionalerProgrammierschnittstellen von den vielen anderen Schnittstellen, die in der Programmierung angewendet werden – zum Beispiel dieParameter, die beim Aufruf vonUnterprogrammen vereinbart und übergeben werden.
Funktionsorientierte Programmierschnittstellen kennen nur Funktionen mit oder ohne Rückgabewert als Mittel der Kommunikation. Dabei wird fast immer das Konzept derHandles 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 werden über die normalen Dateisystemaufrufeopen,read,write undclose angesprochen. Sollen Daten an ein Objekt gesendet werden, werden diese mitwrite geschrieben, sollen welche empfangen werden, werden sie mitread gelesen. Unter UNIX ist dieses Prinzip bei der Ansteuerung von Gerätetreibern weit verbreitet.
Objektorientierte Programmierschnittstellen verwenden Schnittstellenzeiger und sind damit deutlich flexibler als die funktionsorientierten Programmierschnittstellen. Häufig wird eineTypbibliothek mitgegeben.
Protokollorientierte Programmierschnittstellen sind unabhängig vomBetriebssystem und derHardware. Allerdings muss dasProtokoll 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.
Bei Programmierschnittstellen fürAnwendungssoftware wird darüber hinaus auch nachEntwicklungsstufe 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 dieselbeBedeutung 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). AlsRefactoring wird die Fortentwicklung einer Programmierschnittstelle bezeichnet, die keine Änderungen in den Anwenderprogrammen nach sich zieht.[1]
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 freiberuflicheProgrammierer 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, einerSpielkonsole oder einerSmartphone-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 eineEintrittsbarriere 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.
Die EntwicklungsumgebungXcode, mit der auf die API des Smartphone-BetriebssystemsApple iOS zugegriffen werden kann, steht zwar als kostenloser Download bereit, aber nur fürMac-Computer vonApple. Zudem müssen Entwickler einGeheimhaltungsabkommen 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 desAndroid-Betriebssystems mit starker Konkurrenz konfrontiert ist.[2]
Für die Betriebssystem-FamilieUnix existiert der von derIEEE festgelegtePOSIX-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 zurSingle UNIX Specification derOpen Group zu verzeichnen. Diese Standards sind offen, imInternet frei verfügbar und alle können Vorschläge dazu einreichen.
↑Danny Dig, R. Johnson:How do APIs evolve? A story of refactoring. InJournal of Software Maintenance and Evolution.Research and Practice. Wiley, Chichester, New York 2006. S. 1–26.