Eine API (Application Programming Interface) ist eine definierte Schnittstelle, über die zwei Programme miteinander sprechen, ohne ihre inneren Details zu kennen. Sie ist ein Vertrag: Sie legt fest, was man anfragen kann und was zurückkommt. Das Konzept ist breiter als das Web, auch eine Bibliothek oder ein Betriebssystem stellt APIs bereit. Hier geht es um Web-APIs, die Schnittstellen zwischen Systemen über ein Netzwerk.

Anwendungmöchte Daten
GET /konten/8821Anfrage an die API
200 OKAntwort als JSONmaschinenlesbar

Eine API tauscht strukturierte Daten aus, nicht fertige Webseiten. Der Stil dieses Austauschs kann variieren.

Jede App, die Wetter anzeigt, eine Zahlung auslöst oder ein Profil lädt, nutzt im Hintergrund APIs. Anders als eine klassische Website hat eine API kein Gesicht: Es gibt keinen Button, der etwas verbietet. Was erlaubt ist, entscheidet allein die Logik dahinter, und genau dort entstehen die teuersten Lücken.

Zwei Kommunikationsmuster

Wie Systeme über eine API sprechen, folgt im Kern einem von zwei Mustern:

  • Anfrage und Antwort (request-response): Der Client fragt, der Server antwortet, ein Hin und ein Zurück pro Aufruf. So arbeiten REST, GraphQL, gRPC und SOAP.
  • Ereignisgetrieben (event-driven): Daten fließen, sobald etwas passiert, ohne dass jemand aktiv fragt. So arbeiten WebSockets, Webhooks und nachrichtenbasierte Systeme.

Wie eine API beschrieben wird

Damit Menschen und Werkzeuge eine API verstehen, wird sie als maschinenlesbare Spezifikation beschrieben: eine Liste aller Endpunkte, Parameter und Datenformate. Für REST-APIs ist OpenAPI (früher Swagger) der De-facto-Standard. Je nach API-Stil gibt es aber eigene Beschreibungssprachen: GraphQL bringt sein eigenes Schema (SDL) mit, gRPC nutzt Protocol Buffers (.proto), und für ereignisgetriebene APIs gibt es AsyncAPI. Ältere Alternativen sind RAML und API Blueprint.

Auch wann die Spezifikation entsteht, ist eine bewusste Entscheidung. Beim API-first- (oder Design-first-) Ansatz wird der Vertrag zuerst entworfen, bevor eine Zeile Code entsteht. So können Teams parallel dagegen arbeiten, und aus der Spezifikation lassen sich Dokumentation, Mock-Server, Client-Code und Tests automatisch erzeugen, auch Sicherheitsfragen lassen sich früh klären. Der Gegenentwurf ist code-first, bei dem die Spezifikation nachträglich aus dem fertigen Code erzeugt wird.

So oder so ist die Spezifikation Vertrag und Dokumentation zugleich, und sie ist der Ausgangspunkt, an dem ein Security-Test ansetzt: Sie legt die gesamte Angriffsfläche offen.

Themen im Detail

Welcher API-Stil zum Einsatz kommt, hängt vom Anwendungsfall ab. Die folgenden Seiten beginnen mit dem Vergleich der Stile, gehen dann tief in REST und HTTP (den häufigsten Fall) sowie in die weiteren Stile, und behandeln zuletzt die format-übergreifenden Themen.

Die Stile im Überblick

REST und HTTP

Weitere Stile

Format-übergreifend

Häufige Fragen

Sind alle APIs auf HTTP aufgebaut?

Nein. HTTP-basierte Web-APIs wie REST sind am verbreitetsten, aber APIs gibt es auch über andere Protokolle und Stile, etwa gRPC über HTTP/2, GraphQL, WebSockets oder nachrichtenbasierte Schnittstellen. HTTP ist ein häufiger Träger, kein Muss.

Was ist der Unterschied zwischen einer API und einem Endpunkt?

Eine API ist die gesamte Schnittstelle eines Dienstes. Ein Endpunkt ist eine einzelne adressierbare Funktion oder Ressource darin, etwa GET /users. Eine API besteht aus vielen Endpunkten.

Warum sind APIs ein Sicherheitsthema?

Weil eine API direkten, programmatischen Zugriff auf Daten und Funktionen gibt. Ein Logik- oder Berechtigungsfehler in einem Endpunkt wird dadurch unmittelbar zum Datenleck, ohne dass ein klassischer Angriff mit erkennbarem Muster nötig ist.

Quellen

Weiterlesen