API - API

Eine Anwendungsprogrammierschnittstelle ( API ) ist eine Verbindung zwischen Computern oder zwischen Computerprogrammen . Es ist eine Art von Software - Schnittstelle , einen Dienst zu anderen Stücken anzubieten Software . Ein Dokument oder Standard, der beschreibt, wie eine solche Verbindung oder Schnittstelle aufgebaut oder verwendet wird, wird als API-Spezifikation bezeichnet . Ein Computersystem , das diesen Standard erfüllt wird gesagt , implementieren oder aussetzen eine API. Der Begriff API kann sich entweder auf die Spezifikation oder auf die Implementierung beziehen.

Im Gegensatz zu einer Benutzerschnittstelle , die einen Computer mit einer Person verbindet, verbindet eine Anwendungsprogrammierschnittstelle Computer oder Softwareteile miteinander. Es ist nicht für die direkte Verwendung durch eine andere Person (den Endbenutzer ) als einen Computerprogrammierer bestimmt, der es in die Software einbaut. Eine API besteht oft aus verschiedenen Teilen, die als Werkzeuge oder Dienste fungieren, die dem Programmierer zur Verfügung stehen. Ein Programm oder ein Programmierer, der einen dieser Teile verwendet, soll diesen Teil der API aufrufen . Die Aufrufe, aus denen die API besteht, werden auch als Unterroutinen , Methoden, Anforderungen oder Endpunkte bezeichnet . Eine API-Spezifikation definiert diese Aufrufe, d. h. sie erklärt, wie sie verwendet oder implementiert werden.

Ein Zweck von APIs besteht darin , die internen Details der Funktionsweise eines Systems zu verbergen , nur die Teile offenzulegen, die ein Programmierer für nützlich hält, und sie konsistent zu halten, selbst wenn sich die internen Details später ändern. Eine API kann kundenspezifisch für ein bestimmtes Systempaar erstellt werden oder kann ein gemeinsamer Standard sein, der die Interoperabilität zwischen vielen Systemen ermöglicht.

Der Begriff API wird häufig für Web-APIs verwendet , die die Kommunikation zwischen Computern ermöglichen, die über das Internet verbunden sind . Darüber hinaus gibt es APIs für Programmiersprachen , Software - Bibliotheken , Computerbetriebssysteme und Computer - Hardware . APIs entstanden in den 1940er Jahren, obwohl der Begriff erst in den 1960er und 70er Jahren auftauchte.

Zweck

Beim Erstellen von Anwendungen vereinfacht eine API (Application Programming Interface) die Programmierung, indem sie die zugrunde liegende Implementierung abstrahiert und nur Objekte oder Aktionen verfügbar macht, die der Entwickler benötigt. Während eine grafische Oberfläche für einen E-Mail-Client einem Benutzer möglicherweise eine Schaltfläche zur Verfügung stellt, die alle Schritte zum Abrufen und Hervorheben neuer E-Mails ausführt, kann eine API für die Dateieingabe /-ausgabe dem Entwickler eine Funktion zur Verfügung stellen , die eine Datei von einem Speicherort an einen anderen kopiert, ohne erfordert, dass der Entwickler die Dateisystemoperationen versteht , die hinter den Kulissen stattfinden.

Geschichte des Begriffs

Ein Diagramm von 1978, das die Erweiterung der Idee der API zu einer allgemeinen Programmierschnittstelle vorschlägt, über Anwendungsprogramme hinaus .

Der Begriff API beschrieb ursprünglich eine Schnittstelle nur für Endbenutzer-orientierte Programme, die als Anwendungsprogramme bekannt sind . Dieser Ursprung spiegelt sich noch immer im Namen "Application Programming Interface" wider. Heute ist der Begriff breiter und umfasst auch Utility-Software und sogar Hardware-Schnittstellen .

1940er und 50er Jahre

Die Idee der API ist viel älter als der Begriff selbst. Die britischen Informatiker Maurice Wilkes und David Wheeler arbeiteten in den 1940er Jahren an einer modularen Softwarebibliothek für EDSAC , einen frühen Computer. Die Unterprogramme in dieser Bibliothek wurden auf Lochstreifen in einem Aktenschrank organisiert gespeichert . Dieses Kabinett enthielt auch, was Wilkes und Wheeler einen "Bibliothekskatalog" mit Notizen zu jeder Subroutine nannten, und wie man sie in ein Programm einbaut. Heutzutage würde ein solcher Katalog API (oder API-Spezifikation oder API-Dokumentation) genannt, weil er einen Programmierer anweist, jede Subroutine zu verwenden (oder "aufzurufen"), die der Programmierer benötigt.

Das 1951 erschienene Buch The Preparation of Programs for an Electronic Digital Computer von Wilkes und Wheeler enthält die erste veröffentlichte API-Spezifikation. Joshua Bloch ist der Ansicht, dass Wilkes und Wheeler die API „latent erfunden“ haben, weil sie eher ein Konzept ist, das entdeckt als erfunden wird.

Obwohl die Leute, die den Begriff API geprägt haben, Software auf einem Univac 1108 implementierten , war das Ziel ihrer API, hardwareunabhängige Programme zu ermöglichen.

1960er und 70er Jahre

Der Begriff "Anwendungsprogrammschnittstelle" (ohne ein -ing- Suffix) wird erstmals in einem Papier mit dem Titel Datenstrukturen und Techniken für Remote- Computergrafiken erwähnt, das 1968 auf einer AFIPS- Konferenz vorgestellt wurde. Die Autoren dieses Papiers verwenden den Begriff, um die Interaktion von eine Anwendung – in diesem Fall ein Grafikprogramm – mit dem Rest des Computersystems. Eine durchgängige Anwendungsschnittstelle (bestehend aus Fortran- Unterprogrammaufrufen) sollte den Programmierer von den Eigenheiten des grafischen Anzeigegeräts befreien und Hardware-Unabhängigkeit beim Austausch des Computers oder des Displays ermöglichen.

Der Begriff wurde 1974 von CJ Date in einem Artikel mit dem Titel The Relational and Network Approaches: Vergleich der Anwendungsprogrammierschnittstelle in das Gebiet der Datenbanken eingeführt . Eine API wurde Teil des ANSI/SPARC-Frameworks für Datenbankmanagementsysteme . Dieses Framework behandelte die Anwendungsprogrammierschnittstelle getrennt von anderen Schnittstellen, beispielsweise der Abfrageschnittstelle. Datenbankexperten beobachteten in den 1970er Jahren, dass diese verschiedenen Schnittstellen kombiniert werden könnten; eine ausreichend reiche Anwendungsschnittstelle könnte auch die anderen Schnittstellen unterstützen.

Diese Beobachtung führte zu APIs, die alle Arten der Programmierung unterstützten, nicht nur die Anwendungsprogrammierung.

1990er Jahre

1990 wurde die API vom Technologen Carl Malamud einfach als "eine Reihe von Diensten definiert, die einem Programmierer zur Ausführung bestimmter Aufgaben zur Verfügung stehen" .

Mit dem Aufkommen von Remote Procedure Calls und Web-APIs wurde die Idee der API noch einmal erweitert . Als Computernetzwerke in den 1970er und 1980er Jahren üblich wurden, wollten Programmierer Bibliotheken aufrufen, die sich nicht nur auf ihren lokalen Computern, sondern auf anderen Computern befanden. Diese entfernten Prozeduraufrufe wurden insbesondere von der Java- Sprache gut unterstützt . In den 1990er Jahren konkurrierten mit der Verbreitung des Internets Standards wie CORBA , COM und DCOM um die gängigste Methode zur Bereitstellung von API-Diensten.

2000er

Roy Fieldings Dissertation Architectural Styles and the Design of Network-based Software Architectures an der UC Irvine im Jahr 2000 skizzierte Representational State Transfer (REST) ​​und beschrieb die Idee einer "network-based Application Programming Interface", die Fielding mit traditionellen "Library- basierte" APIs. XML- und JSON- Web-APIs wurden von 2000 bis 2021 kommerziell weit verbreitet eingesetzt. Die Web-API ist heute die gebräuchlichste Bedeutung des Begriffs API.

Das 2001 von Tim Berners-Lee vorgeschlagene Semantic Web umfasste "semantische APIs", die die API in eine offene , verteilte Datenschnittstelle und nicht als Software-Verhaltensschnittstelle umwandeln. Proprietäre Schnittstellen und Agenten wurden weiter verbreitet als offene, aber die Idee der API als Datenschnittstelle setzte sich durch. Da Web-APIs weit verbreitet sind, um Daten aller Art online auszutauschen, ist API zu einem weit gefassten Begriff geworden, der einen Großteil der Kommunikation im Internet beschreibt. Bei dieser Verwendung überschneidet sich der Begriff API in der Bedeutung mit dem Begriff Kommunikationsprotokoll .

Verwendungszweck

Bibliotheken und Frameworks

Die Schnittstelle zu einer Softwarebibliothek ist eine Art von API. Die API beschreibt und schreibt das "erwartete Verhalten" (eine Spezifikation) vor, während die Bibliothek eine "tatsächliche Implementierung" dieses Regelwerks ist.

Eine einzelne API kann mehrere Implementierungen (oder keine, da abstrakt) in Form verschiedener Bibliotheken haben, die dieselbe Programmierschnittstelle verwenden.

Die Trennung der API von ihrer Implementierung kann es Programmen ermöglichen, die in einer Sprache geschrieben sind, eine Bibliothek zu verwenden, die in einer anderen geschrieben ist. Da Scala und Java beispielsweise zu kompatiblem Bytecode kompilieren , können Scala-Entwickler jede Java-API nutzen.

Die API-Nutzung kann je nach Art der verwendeten Programmiersprache variieren. Eine API für eine prozedurale Sprache wie Lua könnte hauptsächlich aus Basisroutinen bestehen, um Code auszuführen, Daten zu manipulieren oder Fehler zu behandeln, während eine API für eine objektorientierte Sprache wie Java eine Spezifikation von Klassen und deren Klassenmethoden bereitstellen würde .

Sprachbindungen sind auch APIs. Durch die Abbildung der Merkmale und Fähigkeiten einer Sprache auf eine Schnittstelle, die in einer anderen Sprache implementiert ist, ermöglicht eine Sprachbindung die Verwendung einer Bibliothek oder eines Dienstes, der in einer Sprache geschrieben ist, wenn in einer anderen Sprache entwickelt wird. Tools wie SWIG und F2PY, ein Fortran- to- Python- Schnittstellengenerator, erleichtern die Erstellung solcher Schnittstellen.

Eine API kann auch mit einem Software-Framework verbunden sein : Ein Framework kann auf mehreren Bibliotheken basieren, die mehrere APIs implementieren, aber im Gegensatz zur normalen Verwendung einer API wird der Zugriff auf das in das Framework integrierte Verhalten durch die Erweiterung seines Inhalts mit neuen Klassen vermittelt in das Framework selbst eingesteckt.

Darüber hinaus kann der gesamte Programmfluss der Kontrolle außerhalb der Kontrolle des Aufrufers und in den Händen des Frameworks durch Inversion der Kontrolle oder einen ähnlichen Mechanismus liegen.

Betriebssysteme

Eine API kann die Schnittstelle zwischen einer Anwendung und dem Betriebssystem angeben . POSIX spezifiziert zum Beispiel einen Satz allgemeiner APIs, die es ermöglichen, eine Anwendung, die für ein POSIX-konformes Betriebssystem geschrieben wurde, für ein anderes POSIX-konformes Betriebssystem zu kompilieren .

Linux und Berkeley Software Distribution sind Beispiele für Betriebssysteme, die die POSIX-APIs implementieren.

Microsoft hat ein starkes Engagement für eine abwärtskompatible API gezeigt, insbesondere innerhalb seiner Windows API (Win32)-Bibliothek, sodass ältere Anwendungen unter Verwendung einer ausführbaren spezifischen Einstellung namens "Kompatibilitätsmodus" auf neueren Versionen von Windows ausgeführt werden können.

Eine API unterscheidet sich von einer binären Anwendungsschnittstelle (ABI) darin, dass eine API quellcodebasiert ist, während eine ABI binärbasiert ist . Zum Beispiel POSIX bietet APIs , während die Linux Standard Base ein ABI liefert.

Remote-APIs

Remote-APIs ermöglichen es Entwicklern, Remote-Ressourcen über Protokolle zu manipulieren , spezifische Standards für die Kommunikation, die es ermöglichen, dass verschiedene Technologien unabhängig von Sprache oder Plattform zusammenarbeiten. Die Java Database Connectivity API ermöglicht es Entwicklern beispielsweise, viele verschiedene Arten von Datenbanken mit denselben Funktionen abzufragen , während die Java Remote Method Invocation API das Java Remote Method Protocol verwendet, um den Aufruf von Funktionen zu ermöglichen , die remote arbeiten, aber lokal erscheinen der Entwickler.

Daher sind Remote-APIs nützlich, um die Objektabstraktion in der objektorientierten Programmierung aufrechtzuerhalten ; Ein Methodenaufruf , der lokal auf einem Proxy- Objekt ausgeführt wird, ruft die entsprechende Methode auf dem entfernten Objekt unter Verwendung des Remote-Protokolls auf und ruft das Ergebnis ab, das lokal als Rückgabewert verwendet werden soll.

Eine Modifikation des Proxy-Objekts führt auch zu einer entsprechenden Modifikation des entfernten Objekts.

Web-APIs

Web-APIs sind die definierten Schnittstellen, über die Interaktionen zwischen einem Unternehmen und Anwendungen stattfinden, die seine Assets verwenden. Dies ist auch ein Service Level Agreement (SLA), um den funktionalen Anbieter anzugeben und den Dienstpfad oder die URL für seine API-Benutzer bereitzustellen. Ein API-Ansatz ist ein Architekturansatz, der sich um die Bereitstellung einer Programmschnittstelle zu einer Reihe von Diensten für verschiedene Anwendungen dreht, die verschiedene Arten von Verbrauchern bedienen.

Wenn im Zusammenhang mit der verwendeten Web - Entwicklung wird eine API typischerweise als eine Reihe von Spezifikationen definiert, wie Hypertext Transfer Protocol (HTTP) Anforderungsnachrichten, zusammen mit einer Definition der Struktur von Antwortnachrichten, in der Regel in einem Extensible Markup Language ( XML ) oder das Format JavaScript Object Notation ( JSON ). Ein Beispiel könnte eine Reederei-API sein, die zu einer eCommerce-orientierten Website hinzugefügt werden kann, um die Bestellung von Versanddiensten zu erleichtern und automatisch aktuelle Versandtarife aufzunehmen, ohne dass der Websiteentwickler die Tariftabelle des Versenders in eine Webdatenbank eingeben muss. Während "Web-API" in der Vergangenheit praktisch gleichbedeutend mit Webservice war , geht der jüngste Trend (das sogenannte Web 2.0 ) weg von Simple Object Access Protocol ( SOAP )-basierten Webservices und serviceorientierter Architektur (SOA) hin zu direkteren Webressourcen im Stil von Repräsentational State Transfer (REST) und ressourcenorientierte Architektur (ROA). Ein Teil dieses Trends hängt mit der Semantic Web- Bewegung in Richtung Resource Description Framework (RDF) zusammen, einem Konzept zur Förderung webbasierter Ontologie-Engineering- Technologien. Web-APIs ermöglichen die Kombination mehrerer APIs zu neuen Anwendungen, die als Mashups bezeichnet werden . Im Bereich der sozialen Medien haben Web-APIs es Web-Communitys ermöglicht, den Austausch von Inhalten und Daten zwischen Communities und Anwendungen zu erleichtern. Auf diese Weise können Inhalte, die dynamisch an einer Stelle erstellt werden, an mehreren Stellen im Web veröffentlicht und aktualisiert werden. Beispielsweise ermöglicht die REST-API von Twitter Entwicklern den Zugriff auf Kerndaten von Twitter, und die Such-API bietet Methoden für Entwickler, um mit Twitter-Such- und Trenddaten zu interagieren.

Entwurf

Das Design einer API hat einen erheblichen Einfluss auf ihre Nutzung. Das Prinzip des Information Hiding beschreibt die Rolle von Programmierschnittstellen als Ermöglichung einer modularen Programmierung durch Verbergen der Implementierungsdetails der Module, so dass Benutzer von Modulen die Komplexität innerhalb der Module nicht verstehen müssen. Daher versucht das Design einer API, nur die Tools bereitzustellen, die ein Benutzer erwarten würde. Das Design von Programmierschnittstellen stellt einen wichtigen Teil der Softwarearchitektur dar , die Organisation einer komplexen Software.

Veröffentlichungsrichtlinien

APIs sind eine der gebräuchlicheren Methoden zur Integration von Technologieunternehmen. Diejenigen, die APIs bereitstellen und verwenden, gelten als Mitglieder eines Geschäftsökosystems.

Die wichtigsten Richtlinien für die Freigabe einer API sind:

  • Privat : Die API ist nur für den internen Gebrauch des Unternehmens bestimmt.
  • Partner : Nur bestimmte Geschäftspartner können die API verwenden. Zum Beispiel Fahrzeug zu mieten Unternehmen wie Uber und Lyft erlaubt innerhalb ihrer Apps direkt bestellen Fahrten Entwickler von Drittanbietern zugelassen. Dies ermöglicht es den Unternehmen, eine Qualitätskontrolle durchzuführen, indem sie kuratieren, welche Apps Zugriff auf die API haben, und ihnen eine zusätzliche Einnahmequelle verschafft.
  • Öffentlich : Die API steht der Öffentlichkeit zur Verfügung. Zum Beispiel macht Microsoft die Windows-API öffentlich und Apple veröffentlicht seine API Cocoa , damit Software für ihre Plattformen geschrieben werden kann . Nicht alle öffentlichen APIs sind generell für jeden zugänglich. Beispielsweise verwenden Internetdienstanbieter wie Cloudflare oder Voxility RESTful- APIs, um Kunden und Wiederverkäufern den Zugriff auf ihre Infrastrukturinformationen, DDoS-Statistiken, Netzwerkleistung oder Dashboard-Steuerelemente zu ermöglichen. Der Zugriff auf solche APIs wird entweder durch „API-Token“ oder Kundenstatusvalidierungen gewährt.

Auswirkungen auf die öffentliche API

Ein wichtiger Faktor, wenn eine API öffentlich wird, ist ihre "Schnittstellenstabilität". Änderungen an der API – beispielsweise das Hinzufügen neuer Parameter zu einem Funktionsaufruf – können die Kompatibilität mit den Clients beeinträchtigen, die von dieser API abhängen.

Wenn Teile einer öffentlich präsentierten API Änderungen unterliegen und daher nicht stabil sind, sollten solche Teile einer bestimmten API explizit als "instabil" dokumentiert werden. In der Google Guava- Bibliothek werden beispielsweise die Teile, die als instabil gelten und sich bald ändern könnten, mit der Java-Anmerkung gekennzeichnet @Beta .

Eine öffentliche API kann manchmal Teile von sich selbst als veraltet oder aufgehoben deklarieren . Dies bedeutet normalerweise, dass ein Teil der API als Kandidat für die Entfernung oder Änderung in abwärtskompatibler Weise angesehen werden sollte. Daher ermöglichen diese Änderungen Entwicklern den Übergang von Teilen der API, die entfernt oder in Zukunft nicht mehr unterstützt werden.

Der Clientcode kann innovative oder opportunistische Verwendungen enthalten, die von den API-Designern nicht beabsichtigt waren. Mit anderen Worten, für eine Bibliothek mit einer bedeutenden Benutzerbasis kann ein Element, wenn es Teil der öffentlichen API wird, auf verschiedene Weise verwendet werden. Am 19. Februar 2020 veröffentlichte Akamai seinen jährlichen „State of the Internet“-Bericht, der den wachsenden Trend von Cyberkriminellen aufzeigt, die weltweit auf öffentliche API-Plattformen von Finanzdienstleistungen abzielen. Von Dezember 2017 bis November 2019 erlebte Akamai 85,42 Milliarden Angriffe auf die Verletzung von Anmeldeinformationen. Etwa 20 % oder 16,55 Milliarden waren gegen als API-Endpunkte definierte Hostnamen. Von diesen haben 473,5 Millionen Organisationen des Finanzdienstleistungssektors ins Visier genommen.

Dokumentation

Die API-Dokumentation beschreibt, welche Dienste eine API bietet und wie diese Dienste verwendet werden. Ziel ist es, alles abzudecken, was ein Kunde für praktische Zwecke wissen muss.

Die Dokumentation ist entscheidend für die Entwicklung und Wartung von Anwendungen, die die API verwenden. API-Dokumentation findet sich traditionell in Dokumentationsdateien, kann aber auch in sozialen Medien wie Blogs, Foren und Q&A-Websites gefunden werden.

Herkömmliche Dokumentationsdateien werden oft über ein Dokumentationssystem wie Javadoc oder Pydoc präsentiert, das ein einheitliches Erscheinungsbild und eine einheitliche Struktur aufweist. Die in der Dokumentation enthaltenen Inhaltstypen unterscheiden sich jedoch von API zu API.

Aus Gründen der Übersichtlichkeit kann die API-Dokumentation eine Beschreibung von Klassen und Methoden in der API sowie "typische Nutzungsszenarien, Codeausschnitte, Designgründe, Leistungsdiskussionen und Verträge" enthalten, aber Implementierungsdetails der API-Dienste selbst sind normalerweise weggelassen.

Einschränkungen und Einschränkungen bei der Verwendung der API werden ebenfalls in der Dokumentation behandelt. Zum Beispiel könnte die Dokumentation für eine API-Funktion darauf hinweisen, dass ihre Parameter nicht null sein können, dass die Funktion selbst nicht threadsicher ist . Da die API-Dokumentation in der Regel umfassend ist, ist es für Autoren eine Herausforderung, die Dokumentation auf dem neuesten Stand zu halten und für Benutzer, sie sorgfältig zu lesen, was möglicherweise zu Fehlern führt.

Die API-Dokumentation kann mit Metadateninformationen wie Java-Anmerkungen angereichert werden . Diese Metadaten können vom Compiler, Tools und von der Laufzeitumgebung verwendet werden, um benutzerdefiniertes Verhalten oder benutzerdefinierte Behandlung zu implementieren.

Es ist möglich, API-Dokumentation datengetrieben zu generieren. Durch die Beobachtung vieler Programme, die eine bestimmte API verwenden, ist es möglich, die typischen Verwendungen sowie die erforderlichen Verträge und Richtlinien abzuleiten. Dann können Vorlagen verwendet werden, um natürliche Sprache aus den gewonnenen Daten zu generieren.

Streit um Urheberrechtsschutz für APIs

Im Jahr 2010 verklagte die Oracle Corporation Google, weil es eine neue Java-Implementierung verteilt hatte, die in das Android-Betriebssystem eingebettet war. Google hatte keine Erlaubnis erhalten, die Java-API zu reproduzieren, obwohl die Erlaubnis für das ähnliche OpenJDK-Projekt erteilt wurde. Richter William Alsup entschied im Fall Oracle v. Google , dass APIs in den USA nicht urheberrechtlich geschützt werden können und dass ein Sieg für Oracle den Urheberrechtsschutz auf einen "funktionalen Satz von Symbolen" weit ausgedehnt und das Urheberrecht an einfachen Softwarebefehlen ermöglicht hätte:

Die Behauptung von Oracle zu akzeptieren, würde bedeuten, jedem zu erlauben, eine Version des Codes urheberrechtlich zu schützen, um ein System von Befehlen auszuführen, und dadurch alle anderen daran zu hindern, seine verschiedenen Versionen zu schreiben, um alle oder einen Teil derselben Befehle auszuführen.

Das Urteil von Alsup wurde 2014 im Berufungsverfahren vor dem Bundesberufungsgericht aufgehoben , obwohl die Frage, ob eine solche Verwendung von APIs eine faire Verwendung darstellt, ungelöst blieb.

Im Jahr 2016 entschied eine Jury nach einem zweiwöchigen Prozess, dass die Neuimplementierung der Java-API durch Google eine faire Verwendung darstellte , aber Oracle schwor, gegen die Entscheidung Berufung einzulegen. Oracle gewann in seiner Berufung, wobei der Court of Appeals for the Federal Circuit entschied, dass die Verwendung der APIs durch Google nicht für die faire Verwendung geeignet ist. Im Jahr 2019 legte Google beim Obersten Gerichtshof der Vereinigten Staaten sowohl wegen der Urheberschutz- als auch der Fair-Use-Urteile Berufung ein, und der Oberste Gerichtshof gewährte eine Überprüfung. Aufgrund der COVID-19-Pandemie wurden die mündlichen Verhandlungen in dem Fall auf Oktober 2020 verschoben.

Der Fall wurde vom Obersten Gerichtshof zu Gunsten von Google entschieden.

Beispiele

Siehe auch

Verweise

Weiterlesen

Externe Links