Was ist API?
Eine Application Programming Interface, kurz API, ist eine Programmierschnittstelle, über die unabhängige Softwareanwendungen miteinander kommunizieren und Daten austauschen.
Softwaresysteme stellen diese Programmierschnittstelle oder Anwendungsschnittstelle als eigenständigen Programmteil anderen Programmen zur Anbindung zur Verfügung. Eine API Schnittstelle definiert, wie Daten von einem bestimmten Teil der Anwendung empfangen und gesendet werden.
Im Gegensatz zu einer Binärschnittstelle (ABI) definiert eine Schnittstelle zur Programmierung von Anwendungen die Programmanbindung auf Ebene des Quelltextes. Programmierer schreiben hierfür eine Syntax mit relevanten Parametern und dokumentieren diese für andere Entwickler.
Ziel und Vorteile von APIs
Ziel eines API Interface ist es, komplexe Programme zu modularisieren, also in Programmteile zu "zerlegen", diese Komponenten von der restlichen Anwendung zu trennen und damit die Programmierung zu optimieren. Diese Module kommunizieren ausschließlich über APIs miteinander. Eine API ermöglicht es, auf einzelne Funktionen, Oberflächen, Hardware und Datenbanken zuzugreifen.
Das hat mehrere Vorteile: Die Anwendungsstruktur wird übersichtlicher bzw. vereinfacht. Für die Korrektur von Fehlern müssen nur betroffene Module und API-Daten geprüft werden, nicht aber die gesamte Anwendung. Module lassen sich außerdem als Bausteine wiederverwenden, einfacher entfernen und hinzufügen. Damit werden Programme hochverfügbar, leichter zu warten, lassen sich zügiger weiterentwickeln und schneller an andere Anwendungen anbinden.
Application Programming Interfaces ermöglichen es außerdem, Programmierleistungen auszulagern, als Drittanbieter eigene Funktionen für eine Software zu entwickeln und bereitgestellte Daten in der eigenen Software weiterzuverarbeiten – beispielsweise Sendungsverfolgungsdaten von Carriern in einer Versandsoftware.
APIs vereinfachen es Entwicklern und Entwicklerinnen, neue Anwendungskomponenten in eine bestehende Softwarearchitektur zu integrieren. Sie unterstützen die effektive Kooperation zwischen verschiedenen IT-Teams und Unternehmen. Innovative Services lassen sich so schneller entwickeln, bereitstellen und an Vorsysteme anbinden. Eine gut dokumentierte Programmierschnittstelle kann auch für ein Software-Produkt einen Wettbewerbsvorteil bedeuten. Denn andere Unternehmen und Programmierer können leichter zusätzliche Software für ein System entwickeln und es so attraktiver machen.
Erfolgreiche Anbieter von Ausgangssystemen wie z.B. Smartphone-Betriebssysteme können den API-Zugriff aber auch einschränken und dadurch erschweren, indem sie API Schnittstellen und API Services nur gegen Bezahlung zur Verfügung stellen oder den API Zugriff nur über ein teures Entwicklungssystem ermöglichen.
Neben der Geschäftspolitik zu einer Programmierschnittstelle entscheidet auch die Langzeitstabilität von Application Programming Interfaces über den Erfolg von Software. Bei fehlender Langzeitstabilität einer Software API, also häufigen Änderungen an einem Programming Interface, müssen zusätzliche Anwendungen ebenfalls immer wieder angepasst werden, um weiterhin einwandfrei mit dem Ausgangssystem zu funktionieren. Je nach Aufwand kann das eine Weiterentwicklung externer Anwendungen unattraktiv machen.
Grafik: LOGENTIS GmbH
Arten von APIs
Anwendungsschnittstellen werden nach ihrem Einsatzbereich und nach ihrer Zugänglichkeit unterschieden:
- Öffentliche APIs, auch als externe oder offene APIs bezeichnet, sind für Dritte zugänglich, um die Funktionalitäten und Daten eines Dienstes zu nutzen. Diese öffentlichen Programmierschnittstellen können auch kostenpflichtig sein, beispielsweise, wenn ein gewisses Nutzungskontingent von mehreren Tausend Anfragen pro Tag überschritten wurde.
- Private APIs sind nur innerhalb einer Organisation verfügbar und werden intern verwendet, um verschiedene interne Systeme und Dienste zu integrieren.
- Partner-APIs sind nur für bestimmte, häufig vertraglich gebundene Partner zugänglich und bieten spezifische Dienste für eine enge Zusammenarbeit.
- Komposit-APIs kombinieren verschiedene Dienste und Datenquellen, um komplexe Abläufe und Anfragen zu ermöglichen und die Leistung zu verbessern
- Funktionsorientierte APIs kommunizieren über Funktionen und Parameter.
- Protokollorientierte APIs sind unabhängig von bestimmten Betriebssystemen oder Hardware. Die Programme kommunizieren über von ihnen definierte Kanäle wie Protokolle oder Bibliotheken.
- Datenorientierte APIs ermöglichen den Zugriff auf Dateien und Dateifunktionen per Dateisystemaufruf und setzen Zugriffsrechte voraus.
- Objektorientierte APIs werden häufig als SDKs (Software Development Kits) angeboten und sind meist Bibliotheken für fertige Funktionen.
Beispiele für Anwendungsschnittstellen
API-Schnittstellen gehören heute zum Standard in vielen Anwendungen. Insbesondere öffentliche Web-APIs werden immer beliebter. Denn eine Programmierschnittstelle zu öffnen, erschließt neue Einnahmequellen, vergrößert die Reichweite einer Marke und erleichtert Kollaborationen von IT-Teams sowie externe Entwicklungen.
Beliebte API Beispiele bieten Zugriff auf Funktionen wie Datenverarbeitung, soziale Medien, Karteninformationen, Zahlungssysteme oder Logistikdienstleistungen wie die Sendungsverfolgung und Retourenabwicklung. Ein API Beispiel ist Google Maps oder ein Bezahldienst wie Paypal. Beide lassen sich auf die eigenen Shop-Seiten bzw. Unternehmensseiten einbinden, erhöhen die Reichweite und erleichtern den Zahlungsverkehr.
Öffentliche APIs erleichtern die Entwicklung von Anwendungen, indem sie standardisierte Methoden zum Abrufen von Daten und Diensten bereitstellen. Bei öffentlichen Anwendungsschnittstellen haben sich REST-basierte Dienste durchgesetzt, die sich das HTTP-Protokoll zunutze machen.
Was ist eine REST-Api?
Webservices sind wichtig für verteilte Softwaresysteme. Schnell wachsende Technologien mit immer umfangreicheren Funktionen wurden für kleinere Anwendungen aber schnell zu rechenintensiv. Daher entwickelte der amerikanische Informatiker Roy Fielding im Jahr 2000 eine neue einfache Softwarearchitektur für Datenaustausch zwischen Softwaresystemen: REST oder Representational State Transfer. Inzwischen ist sie eine der verbreitetsten und wichtigsten Technologien zur Systemkopplung im Web.
Der REST-Architekturstil konzentriert sich auf Zustandslosigkeit und Ressourcen statt Aktionen. Zunächst wird eine Ressource adressiert und danach eine der Grundaktionen Auslesen (GET), Erstellen (POST), Ändern (PUT) oder Löschen (DELETE) ausgeführt. Über die Programmierschnittstelle kann man dem angebundenen System vorgeben, in welchem Format es antworten soll, z.B. JSON.
Zustandslos bedeutet, dass Client und Server bei jedem REST-Aufruf alle beschreibenden Parameter austauschen. Jeder REST-Aufruf ist damit abgeschlossen, d.h. ohne die übrigen Aufrufe verständlich. Auf Sessions bzw. Sitzungen zwischen Client und Server mit gespeicherten Variablen und mehreren aufeinander bezogenen Einzelaufrufen wird verzichtet. Client-Systeme und Server-Systeme können so frei skaliert werden.
Die RESTful API definiert die Ressourcen, die per REST adressiert werden. Die dazugehörigen Parameter können modifiziert werden. Auch wenn der Representational State Transfer keine Technologie vorschreibt, wird REST üblicherweise mit dem HTTP-Protokoll umgesetzt. Eine Web-API, die die folgenden Vorgaben der REST-Architektur erfüllt, heißt RESTful API:
- REST-Architekturen bestehen aus Clients, Servern und Ressourcen, Anfragen werden in der Regel per HTTP gehandelt.
- Zwischen den Anfragen werden keine Client-Inhalte auf dem Server gespeichert, der Sitzungsstatus wird auf dem Client hinterlegt. Bei einem Aufruf werden alle Parameter ausgetauscht. Das fasst der Begriff "Zustandslosigkeit" zusammen.
- Die Web-API umfasst die Fähigkeit zum Caching, also das temporäre Speichern von Daten auf einer Hochgeschwindigkeits-Speicherebene, um Anforderungen für einige Client/Server-Interaktionen zu erfüllen.
- ein Mehrschichtsystem für Client/Server-Interaktionen ermöglicht es, Zusatzfunktionen auszuführen, wie z.B. gemeinsame Caches oder Lastenverteilung.
- Der Server kann ausführbaren Code übertragen und so die Funktionalität eines Clients erweitern.
- Die Ressourcen werden in der Anfrage identifiziert und von den zurückgegebenen Darstellungen getrennt.
- Die Clients empfangen Ressourcen-Darstellungen mit ausreichend Informationen, um die Ressourcen zu manipulieren.
- Die an den Client zurückgegebene Nachricht beschreiben, wie der Client die Daten verarbeiten kann.
- Nach dem Zugriff auf eine Ressource kann der REST-Client alle verfügbaren Maßnahmen über Hyperlinks erkennen.
Mit der OpenAPI-Spezifikation der OpenAPI Initiative hat sich ein gemeinsames, sprachunabhängiges und herstellerneutrales Beschreibungsformat für API-Dienste durchgesetzt. Mit diesem Standard lassen sich auch REST-konforme Programmierschnittstellen definieren.
GraphQL: Die Zukunft von REST?
Die Idee der REST-Architektur hat Facebook zur GraphQL-Architektur weiterentwickelt und diese 2015 veröffentlicht. In dieser ebenfalls zustandslosen Abfragesprache wird in Schemas festgelegt, wie ein Endpunkt antwortet und wie die Struktur dieser Daten ist. GraphQL stellt Clients nur die wirklich benötigten Daten zur Verfügung. Anfragen lassen sich mit GraphQL so strukturieren, dass gleichzeitig Daten aus mehreren Quellen abgerufen werden.