<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Programmierschnittstelle</id>
	<title>Programmierschnittstelle - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Programmierschnittstelle"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Programmierschnittstelle&amp;action=history"/>
	<updated>2026-05-14T19:36:19Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=Programmierschnittstelle&amp;diff=10791&amp;oldid=prev</id>
		<title>imported&gt;Mrjokla: /* growthexperiments-addlink-summary-summary:2|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Programmierschnittstelle&amp;diff=10791&amp;oldid=prev"/>
		<updated>2025-02-26T07:09:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:2|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Linux kernel interfaces.svg|mini|Standardisierte Programmier&amp;amp;shy;schnittstellen (APIs) über unterschiedliche Betriebssysteme sorgen für [[Kompatibilität (Technik) #Quelltextkompatibilität|Quelltextkompatibilität]], d.&amp;amp;nbsp;h. Quelltext kann ohne Anpassungen für die jeweiligen Systeme erfolgreich kompiliert werden.]]&lt;br /&gt;
&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;Programmierschnittstelle&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;&amp;#039;Anwendungsschnittstelle&amp;#039;&amp;#039;&amp;#039;, genauer &amp;#039;&amp;#039;[[Schnittstelle]] zur [[Programmierung]] von [[Anwendungssoftware|Anwendungen]]&amp;#039;&amp;#039;), häufig nur kurz &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; genannt (von {{enS|&amp;#039;&amp;#039;application programming interface&amp;#039;&amp;#039;}}, wörtlich ‚&amp;#039;&amp;#039;&amp;#039;Anwendungs&amp;amp;shy;programmier&amp;amp;shy;schnittstelle&amp;#039;&amp;#039;&amp;#039;‘), ist ein Programmteil, der von einem [[Software]]system anderen [[Computerprogramm|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.&amp;lt;!--&amp;lt;ref&amp;gt;{{cite web |accessdate= 2011-03-27 |author= Oliver Thoma |location= books.google.at/ |page=57 |publisher= Google Bücher |title= Mac OS X 10.4 Tiger |url= https://books.google.at/books?id=xXHNB1Xm3UEC&amp;amp;pg=PA57&amp;amp;lpg=PA57&amp;amp;dq=&amp;quot;was+ist+eine+programmierschnittstelle&amp;quot;&amp;amp;source=bl&amp;amp;ots=e72aNoPR9m&amp;amp;sig=2-q0V54ha2OQnvyN_0i4AezUDAk&amp;amp;hl=de&amp;amp;ei=hVmPTf_YLZK5hAf6pOC7Dg&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CBoQ6AEwAA#v=onepage&amp;amp;q=&amp;quot;was ist eine programmierschnittstelle&amp;quot; |year=2006}}&amp;lt;/ref&amp;gt;--&amp;gt; Die Bereitstellung einer solchen Schnittstelle beinhaltet in der Regel eine detaillierte Dokumentation der Schnittstellenfunktionen mit ihren Parametern auf Papier oder als [[elektronisches Dokument]].&lt;br /&gt;
&lt;br /&gt;
Neben dem Zugriff auf [[Datenbank]]en oder [[Hardware]] wie [[Festplattenlaufwerk|Festplatte]] oder [[Grafikkarte]] kann eine Programmierschnittstelle auch die Erstellung von Komponenten der [[Grafische Benutzeroberfläche|grafischen Benutzeroberfläche]] ermöglichen oder vereinfachen. Beispielsweise ermöglicht die Programmierschnittstelle &amp;#039;&amp;#039;[[Windows Application Programming Interface]]&amp;#039;&amp;#039; des Betriebssystems [[Windows]] externen Firmen die Entwicklung von Software für dieses Betriebssystem.&lt;br /&gt;
&lt;br /&gt;
Heutzutage stellen auch viele [[Online-Dienst]]e Programmierschnittstellen zur Verfügung; diese heißen dann [[Webservice]].&lt;br /&gt;
Im weiteren Sinne wird die Schnittstelle jeder [[Programmbibliothek|Bibliothek]] (englisch {{lang|en|&amp;#039;&amp;#039;library&amp;#039;&amp;#039;}}) als Programmierschnittstelle bezeichnet. Zu unterscheiden ist diese Art funktionaler &amp;#039;&amp;#039;Programmierschnittstellen&amp;#039;&amp;#039; von den vielen anderen Schnittstellen, die in der Programmierung angewendet werden – zum Beispiel die [[Parameter (Informatik)|Parameter]], die beim Aufruf von [[Unterprogramm]]en vereinbart und übergeben werden.&lt;br /&gt;
&lt;br /&gt;
== Einteilung nach Typklassen ==&lt;br /&gt;
Programmierschnittstellen lassen sich in folgende Typklassen einteilen:&lt;br /&gt;
* [[Funktion (Programmierung)|funktionsorientiert]] (z.&amp;amp;nbsp;B. [[Dynamic Link Library]])&lt;br /&gt;
* [[datei]]orientiert (z.&amp;amp;nbsp;B. [[Gerätedatei]]en unter [[Unix]])&lt;br /&gt;
* [[Objekt (Programmierung)|objektorientiert]] (z.&amp;amp;nbsp;B. [[ActiveX]]-DLLs)&lt;br /&gt;
* [[Netzwerkprotokoll|protokollorientiert]] (z.&amp;amp;nbsp;B. [[File Transfer Protocol|FTP]])&lt;br /&gt;
&lt;br /&gt;
=== Funktionsorientierte Programmierschnittstellen ===&lt;br /&gt;
Funktionsorientierte Programmierschnittstellen kennen nur Funktionen mit oder ohne Rückgabewert als Mittel der Kommunikation. Dabei wird fast immer das Konzept der [[Handle]]s 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.&lt;br /&gt;
&lt;br /&gt;
=== Dateiorientierte Programmierschnittstellen ===&lt;br /&gt;
Dateiorientierte Programmierschnittstellen werden über die normalen Dateisystemaufrufe &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;close&amp;lt;/code&amp;gt; angesprochen. Sollen Daten an ein Objekt gesendet werden, werden diese mit &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; geschrieben, sollen welche empfangen werden, werden sie mit &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; gelesen. Unter UNIX ist dieses Prinzip bei der Ansteuerung von Gerätetreibern weit verbreitet.&lt;br /&gt;
&lt;br /&gt;
=== Objektorientierte Programmierschnittstellen ===&lt;br /&gt;
Objektorientierte Programmierschnittstellen verwenden Schnittstellenzeiger und sind damit deutlich flexibler als die funktionsorientierten Programmierschnittstellen. Häufig wird eine [[Typbibliothek]] mitgegeben.&lt;br /&gt;
&lt;br /&gt;
=== Protokollorientierte Programmierschnittstellen ===&lt;br /&gt;
Protokollorientierte Programmierschnittstellen sind unabhängig vom [[Betriebssystem]] und der [[Hardware]]. Allerdings muss das [[Netzwerkprotokoll|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.&amp;amp;nbsp;B. [[SOAP]]) und anwendungsspezifischen (z.&amp;amp;nbsp;B. [[Simple Mail Transfer Protocol|SMTP]])-Protokollen unterscheiden.&lt;br /&gt;
&lt;br /&gt;
== Einteilung nach Entwicklungsstufen ==&lt;br /&gt;
Bei Programmierschnittstellen für [[Anwendungssoftware]] wird darüber hinaus auch nach [[Entwicklungsstadium (Software)|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 [[Semantik|Bedeutung]] haben. Bei einer stabilen Schnittstelle braucht die Anwendung nicht mehr geändert zu werden. Unterschieden wird zwischen sich entwickelnden (engl. {{lang|en|&amp;#039;&amp;#039;evolving&amp;#039;&amp;#039;}}) und stabilen Programmierschnittstellen (engl. {{lang|en|&amp;#039;&amp;#039;stable API&amp;#039;&amp;#039;}}). Als [[Refactoring]] wird die Fortentwicklung einer Programmierschnittstelle bezeichnet, die keine Änderungen in den Anwenderprogrammen nach sich zieht.&amp;lt;ref&amp;gt;Danny Dig, R. Johnson: [https://dig.cs.illinois.edu/papers/JSME_API_Evolution.pdf &amp;#039;&amp;#039;How do APIs evolve? A story of refactoring&amp;#039;&amp;#039;.] In &amp;#039;&amp;#039;Journal of Software Maintenance and Evolution&amp;#039;&amp;#039;. &amp;#039;&amp;#039;Research and Practice&amp;#039;&amp;#039;. Wiley, Chichester, New York 2006. S. 1–26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bedeutung ==&lt;br /&gt;
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-[[Integrierte Entwicklungsumgebung|Entwicklungssystem]] zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
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 [[Apple Macintosh|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 App]]s durch den großen Erfolg des [[Android (Betriebssystem)|Android-Betriebssystems]] mit starker Konkurrenz konfrontiert ist.&amp;lt;ref name=&amp;quot;EFF&amp;quot;&amp;gt;{{cite web|url=https://www.eff.org/deeplinks/2010/03/iphone-developer-program-license-agreement-all |title=All Your Apps Are Belong to Apple: The iPhone Developer Program License Agreement |publisher=[[Electronic Frontier Foundation]] |date=2010-03-09 |accessdate=2010-04-17}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Betriebssystem-Familie [[Unix]] existiert der von der [[IEEE]] festgelegte [[Portable Operating System Interface|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.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Schnittstelle (Objektorientierung)]]&lt;br /&gt;
* [[IMAPI]] (Image Mastering API)&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur |Autor=[[Erich Gamma]], [[Richard Helm]], [[Ralph Johnson]], [[John Vlissides]] |Titel=[[Entwurfsmuster (Buch)|Design Patterns]] – Elements of Reusable Object-Oriented Software |Verlag=Addison-Wesley |Ort=Reading MA u.&amp;amp;nbsp;a. |Datum=1995 |ISBN=0-201-63361-2}}&lt;br /&gt;
* {{Literatur |Autor=[[Joshua Bloch]] |Titel=How to Design a Good API and Why it Matters |Hrsg=[[Association for Computing Machinery|ACM]] |Sammelwerk=Companion to the 21st ACM SIGPLAN symposium on [[OOPSLA]] |Datum=2006-10 |DOI=10.1145/1176617.1176622 |Online=https://static.googleusercontent.com/media/research.google.com/de//pubs/archive/32713.pdf |Format=PDF |KBytes=567}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4430243-5}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierschnittstelle| ]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Mrjokla</name></author>
	</entry>
</feed>