Du möchtest automatisch einen neuen Beitrag in WordPress anlegen.

Deine Automatisierung kennt:

Titel,

Text,

Kategorie,

Veröffentlichungsstatus.

Nun könnte ein Programm theoretisch direkt auf die WordPress-Datenbank zugreifen und dort irgendwelche Tabellen verändern.

Das wäre allerdings eine ziemlich schlechte Idee.

Die Anwendung müsste wissen:

welche Tabellen WordPress verwendet,

welche Felder wohin gehören,

welche Nebenwirkungen ein neuer Beitrag besitzt,

wie Berechtigungen funktionieren,

welche internen Regeln WordPress erwartet.

Viel besser ist:

WordPress stellt eine definierte Schnittstelle bereit.

Dein Programm sagt sinngemäß:

Erstelle einen neuen Beitrag.

Titel:
Was ist eine API?

Status:
draft

Inhalt:
...

WordPress nimmt diese Anfrage entgegen, prüft sie und erzeugt den Beitrag auf dem vorgesehenen Weg.

Diese definierte Verbindung zwischen Softwaresystemen nennt man eine API.

API steht für:

Application Programming Interface.

Auf Deutsch ungefähr:

Programmierschnittstelle.

Eine API ist eine vereinbarte Sprache zwischen Programmen

Menschen besitzen Benutzeroberflächen.

Du klickst in WordPress auf:

Beiträge
↓
Erstellen
↓
Veröffentlichen

Software kann keine Maus benötigen.

Sie braucht eine technische Schnittstelle.

Automatisierung
↓
API
↓
WordPress

Eine API definiert:

Welche Aktionen sind möglich?

Welche Daten müssen übergeben werden?

In welchem Format?

Welche Antwort kommt zurück?

Wer darf die Aktion ausführen?

Damit können zwei Programme miteinander arbeiten, ohne die internen Details des jeweils anderen Systems kennen zu müssen.

Eine API ist wie ein kontrollierter Eingang

Stell dir ein Restaurant vor.

Du möchtest ein Essen.

Du gehst nicht:

in die Küche,

öffnest Kühlschränke,

bedienst den Herd

und suchst Zutaten.

Du sprichst mit dem Service.

Gast
↓
Bestellung
↓
Service
↓
Küche

Der Service ist die Schnittstelle.

Du musst nicht wissen:

welcher Koch welches Messer verwendet.

Genauso funktioniert eine API.

Anwendung
↓
API
↓
internes System

Die API versteckt interne Komplexität.

API bedeutet nicht automatisch Web-API

Der Begriff ist breiter.

Auch eine Programmbibliothek kann eine API besitzen.

Zum Beispiel:

calculate_total()

ist eine Funktion, die andere Software verwenden kann.

Ein Betriebssystem besitzt APIs.

Eine Datenbank besitzt APIs.

Eine Bibliothek besitzt APIs.

Im Web meint man mit API aber sehr häufig eine Web-API, die über ein Netzwerk angesprochen wird.

Genau darauf konzentrieren wir uns hier.

Eine Web-API funktioniert häufig über HTTP

HTTP kennen wir bereits aus der Funktionsweise von Websites.

Ein Browser stellt beispielsweise eine Anfrage:

GET /wissen/api/

Der Webserver antwortet.

Dasselbe Prinzip lässt sich für Software verwenden.

Programm
↓
HTTP Request
↓
API
↓
HTTP Response
↓
Programm

Der Unterschied:

Statt einer fertigen HTML-Webseite erhält das Programm häufig strukturierte Daten.

Zum Beispiel JSON.

Eine API-Anfrage heißt Request

Ein Request ist eine Anfrage an eine API.

Zum Beispiel:

Gib mir den Kunden mit der ID 4711.

Technisch könnte das ungefähr aussehen wie:

GET /api/customers/4711

Die API erhält diese Anfrage.

Sie prüft:

Darf der Anfragende diesen Datensatz sehen?

Existiert der Kunde?

Dann erzeugt sie eine Antwort.

Die Antwort heißt Response

Die Antwort könnte sein:

{
  "id": 4711,
  "name": "Anna Muster",
  "status": "active"
}

Damit haben wir das einfachste API-Modell:

Client
↓
Request
↓
Server
↓
Response
↓
Client

Was ist ein Client?

Der Client ist in diesem Zusammenhang das System, das die API aufruft.

Das kann sein:

eine Website,

eine Smartphone-App,

n8n,

ein Python-Skript,

ein WordPress-Plugin,

ein KI-Agent.

Der Client sagt:

Ich möchte etwas von dir.

Der API-Server beantwortet die Anfrage.

Was ist ein Endpoint?

Eine API kann viele Funktionen besitzen.

Jede davon braucht eine Adresse.

Solche Adressen nennt man häufig Endpoints.

Beispielsweise:

/api/customers

für Kunden.

/api/orders

für Bestellungen.

/api/products

für Produkte.

Ein konkreter Kunde könnte erreichbar sein unter:

/api/customers/4711

Der Endpoint beschreibt also:

Welche Ressource beziehungsweise Funktion wird angesprochen?

Eine API besteht häufig aus vielen Endpoints

Ein Shop könnte beispielsweise anbieten:

/products
/orders
/customers
/payments

Damit können externe Programme gezielt auf bestimmte Bereiche zugreifen.

Nicht jede Anwendung bekommt zwangsläufig Zugriff auf alle.

Endpoint und HTTP-Methode ergeben gemeinsam die Aktion

Nehmen wir:

/api/customers/4711

Allein diese URL sagt noch nicht unbedingt, was passieren soll.

Die HTTP-Methode ergänzt die Bedeutung.

GET

kann bedeuten:

Datensatz lesen.

DELETE

kann bedeuten:

Datensatz löschen.

Die Kombination ist entscheidend.

Was bedeutet GET?

GET wird typischerweise verwendet, um Informationen abzurufen.

Zum Beispiel:

GET /api/customers/4711

Bedeutung:

Gib mir Kunde 4711.

Oder:

GET /api/orders

Gib mir Bestellungen.

Ein GET sollte normalerweise keine geschäftliche Veränderung auslösen.

Das macht GET-Anfragen besonders geeignet für Lesezugriffe.

GET-Anfragen können Parameter besitzen

Zum Beispiel:

GET /api/orders?status=open

Nun lautet die Anfrage:

Gib mir nur offene Bestellungen.

Zusätzlich:

GET /api/orders?status=open&customer_id=4711

Nun:

Gib mir offene Bestellungen von Kunde 4711.

Diese Werte hinter dem Fragezeichen nennt man häufig Query-Parameter.

Query-Parameter eignen sich für Filter

Zum Beispiel:

?page=2
?limit=100
?sort=date
?language=de

Damit kann eine API flexibel gesteuert werden, ohne für jede Kombination einen neuen Endpoint zu benötigen.

Was bedeutet POST?

POST wird häufig verwendet, um etwas Neues anzulegen beziehungsweise eine Aktion auszulösen.

Zum Beispiel:

POST /api/customers

Dazu sendet der Client Daten:

{
  "name": "Anna Muster",
  "email": "anna@example.com"
}

Die API erstellt daraus einen neuen Kunden.

Der Response kann den erzeugten Datensatz zurückgeben

Zum Beispiel:

{
  "id": 4711,
  "name": "Anna Muster",
  "email": "anna@example.com"
}

Die wichtige neue Information lautet:

id = 4711

Der Client kann diese ID anschließend für weitere Aktionen verwenden.

Was bedeutet PUT?

PUT wird typischerweise verwendet, um eine Ressource vollständig zu ersetzen beziehungsweise auf einen definierten Zustand zu setzen.

Beispielsweise:

PUT /api/customers/4711

mit:

{
  "name": "Anna Muster",
  "email": "neu@example.com",
  "status": "active"
}

Je nach API kann PUT bedeuten:

Setze den Datensatz auf genau diesen Zustand.

Die genaue Semantik muss allerdings immer aus der Dokumentation der konkreten API gelesen werden.

Was bedeutet PATCH?

PATCH wird häufig verwendet, um nur bestimmte Teile eines Datensatzes zu verändern.

Zum Beispiel:

PATCH /api/customers/4711

mit:

{
  "status": "inactive"
}

Nur der Status wird geändert.

Andere Felder bleiben unberührt.

Das ist besonders praktisch für kleine Änderungen.

Was bedeutet DELETE?

DELETE wird typischerweise zum Entfernen einer Ressource verwendet.

DELETE /api/customers/4711

Bedeutung:

Lösche Kunde 4711.

Ob tatsächlich physisch gelöscht oder nur ein Status wie:

deleted = true

gesetzt wird, hängt vom System ab.

Für den Client zählt zunächst die veröffentlichte API-Semantik.

Die wichtigsten HTTP-Methoden ergeben ein einfaches Modell

GET
→ lesen

POST
→ neu anlegen / Aktion auslösen

PUT
→ ersetzen

PATCH
→ teilweise ändern

DELETE
→ löschen

Das ist eine gute Grundorientierung.

Eine konkrete API kann bestimmte Methoden allerdings anders oder eingeschränkter verwenden.

Die Dokumentation ist daher immer maßgeblich.

CRUD passt gut zu diesem Modell

In Datenanwendungen begegnet häufig das Kürzel CRUD.

Es steht für:

Create
Read
Update
Delete

Also:

Erstellen
Lesen
Ändern
Löschen

Eine typische REST-API bildet diese Funktionen beispielsweise ab über:

POST
GET
PATCH / PUT
DELETE

CRUD und HTTP-Methoden sind nicht dasselbe Konzept.

Sie passen aber häufig gut zusammen.

Was ist REST?

Viele Web-APIs werden als REST APIs bezeichnet.

REST steht für:

Representational State Transfer.

REST ist ein Architekturstil für verteilte Systeme und keine einzelne Programmiersprache.

Für den praktischen Einstieg bedeutet REST häufig:

Ressourcen besitzen URLs,

HTTP-Methoden drücken Aktionen aus,

HTTP-Statuscodes beschreiben Ergebnisse,

Daten werden in standardisierten Repräsentationen übertragen.

Eine Ressource kann ein Kunde sein

Zum Beispiel:

/customers/4711

Oder ein Beitrag:

/posts/172

Oder eine Bestellung:

/orders/98273

Die API behandelt diese Dinge als Ressourcen.

Gute REST-URLs beschreiben eher Dinge als Aktionen

Zum Beispiel:

POST /orders

statt:

/createNewOrderNow

und:

DELETE /orders/4711

statt:

/deleteOrderNumber4711

Die HTTP-Methode trägt einen Teil der Bedeutung.

Das hält API-Strukturen konsistent.

REST ist aber keine zwingende Voraussetzung für APIs

Andere API-Stile existieren ebenfalls.

Zum Beispiel:

GraphQL.

RPC.

SOAP.

WebSocket-basierte Schnittstellen.

Eine API muss nicht REST verwenden.

REST ist lediglich sehr verbreitet.

Was ist GraphQL?

Bei einer klassischen REST-API existieren möglicherweise mehrere Endpoints.

GraphQL verfolgt einen anderen Ansatz.

Der Client beschreibt sehr genau:

Welche Daten brauche ich?

Beispielsweise sinngemäß:

customer 4711
→ name
→ email
→ lastOrders

Der Server liefert genau diese Felder.

Das kann besonders bei komplexen Datenstrukturen praktisch sein.

REST und GraphQL sind keine Qualitätsstufen

Nicht:

REST = alt
GraphQL = modern und besser

Beide besitzen Stärken und Nachteile.

Für viele Automatisierungen ist eine einfache REST-API hervorragend.

Man sollte nicht unnötig Architektur wechseln, nur weil eine andere Technik neuer klingt.

Was ist RPC?

RPC steht für:

Remote Procedure Call.

Dabei wirkt die Schnittstelle stärker wie der Aufruf einer entfernten Funktion.

Zum Beispiel sinngemäß:

sendInvoice(4711)

oder:

calculateShipping(order)

Die Grenze zwischen REST und RPC kann in echten APIs durchaus verschwimmen.

Für Automatisierer ist wichtiger:

Welche Operation bietet die Schnittstelle tatsächlich an?

Was ist SOAP?

SOAP ist ein älterer, aber weiterhin eingesetzter Standard für strukturierte Web-Service-Kommunikation.

SOAP verwendet typischerweise XML und sehr klar definierte Nachrichtenstrukturen.

Man begegnet SOAP besonders in:

älteren Unternehmenssystemen,

Behördenumgebungen,

Banken,

großen ERP-Landschaften.

Wenn ein System funktioniert und SOAP anbietet, muss es nicht allein deshalb ersetzt werden.

Moderne Automatisierung muss unterschiedliche API-Arten verbinden können

Ein Workflow könnte gleichzeitig sprechen mit:

REST API,

SOAP-Service,

Datenbank,

lokaler KI,

Webhook.

Die Workflowengine übersetzt zwischen diesen Systemen.

Das ist einer der Gründe, warum Integrationsplattformen so nützlich sind.

Warum wird bei APIs so häufig JSON verwendet?

JSON ist:

relativ kompakt,

für Menschen lesbar,

einfach maschinell verarbeitbar,

in fast allen Programmiersprachen unterstützt.

Beispiel:

{
  "id": 4711,
  "name": "Anna",
  "active": true
}

Das passt hervorragend zu APIs.

API und Structured Outputs ergänzen sich perfekt

Das haben wir bereits bei strukturierten KI-Ausgaben vorbereitet.

Die KI liefert:

{
  "customer_id": 4711,
  "action": "create_ticket"
}

Die Workflowsoftware verwendet diese Werte anschließend für einen API-Aufruf.

LLM
↓
Structured Output
↓
API
↓
externes System

Das ist eine der wichtigsten Architekturen moderner KI-Automatisierung.

Das Sprachmodell muss die API nicht frei bedienen

Ein schlechter Ansatz wäre:

Hier ist die komplette API-Dokumentation und unser Schlüssel. Mach einfach irgendwas, was du für richtig hältst.

Besser:

LLM
↓
strukturierte Entscheidung
↓
Software prüft
↓
API-Aufruf

Dadurch bleibt die eigentliche technische Kontrolle in normaler Software.

Was enthält ein HTTP-Request?

Ein Request kann mehrere Bestandteile besitzen.

Vereinfacht:

Methode
URL
Header
Body

Zum Beispiel:

POST /api/customers

Header:

Content-Type: application/json

Body:

{
  "name": "Anna"
}

Jeder Teil erfüllt eine andere Aufgabe.

Was sind HTTP-Header?

Header enthalten zusätzliche Informationen zur Anfrage beziehungsweise Antwort.

Zum Beispiel:

Content-Type: application/json

bedeutet:

Der Body enthält JSON.

Oder:

Authorization: ...

übermittelt Authentifizierungsinformationen.

Oder:

Accept: application/json

teilt mit:

Der Client möchte JSON erhalten.

Der Body enthält häufig die eigentlichen Nutzdaten

Bei:

POST
PUT
PATCH

findet man häufig einen Request Body.

Zum Beispiel:

{
  "title": "Was ist eine API?",
  "status": "draft"
}

Bei normalen GET-Anfragen werden Parameter dagegen häufig über URL beziehungsweise Query-Parameter übertragen.

Was ist Content-Type?

Eine API muss wissen, welches Datenformat geschickt wurde.

Zum Beispiel:

Content-Type: application/json

Oder:

Content-Type: application/xml

Oder bei Dateiübertragungen andere Formate.

Wenn der Server JSON erwartet und irgendeinen unstrukturierten Text erhält, kann die Anfrage scheitern.

API-Kommunikation braucht klare Verträge

Die Dokumentation könnte definieren:

Endpoint:

POST /customers

Pflichtfelder:

name
email

Optional:

phone

Antwort:

customer object

Genau diese Klarheit macht APIs automatisierbar.

Was sind HTTP-Statuscodes?

Eine API muss mitteilen:

Hat die Anfrage funktioniert?

Dafür werden unter anderem HTTP-Statuscodes verwendet.

Bekannte Beispiele:

200
201
400
401
403
404
429
500

Die erste Ziffer gibt bereits eine grobe Klasse an.

2xx bedeutet normalerweise Erfolg

Zum Beispiel:

200 OK

Die Anfrage war erfolgreich.

Oder:

201 Created

Eine neue Ressource wurde erfolgreich angelegt.

Ein API-Workflow sollte diese Statuscodes auswerten.

3xx betrifft Weiterleitungen

Zum Beispiel:

301
302

Bei klassischen Webseiten sind Redirects sehr bekannt.

APIs können ebenfalls Weiterleitungen liefern.

Client-Bibliotheken folgen ihnen teilweise automatisch.

Trotzdem sollte man bei unerwarteten Redirects prüfen, warum sie entstehen.

4xx bedeutet normalerweise: Problem mit der Anfrage

Zum Beispiel:

400 Bad Request

Die Anfrage ist ungültig.

Vielleicht:

Pflichtfeld fehlt.

Datentyp falsch.

JSON ungültig.

401 bedeutet typischerweise Authentifizierung fehlt oder ist ungültig

401 Unauthorized

Trotz des Namens geht es in der Praxis häufig darum:

Ich weiß nicht erfolgreich, wer du bist beziehungsweise deine Zugangsdaten sind nicht gültig.

Beispielsweise:

Token abgelaufen.

API-Key falsch.

403 bedeutet häufig: Identität bekannt, aber Aktion nicht erlaubt

403 Forbidden

Zum Beispiel:

Benutzer darf Beiträge lesen,

aber nicht löschen.

Das ist ein wichtiger Unterschied.

401
→ Authentifizierung problematisch
403
→ Berechtigung problematisch

404 bedeutet Ressource nicht gefunden

404 Not Found

Zum Beispiel:

GET /customers/999999

und dieser Datensatz existiert nicht.

Ein Workflow sollte einen 404 nicht automatisch wie einen Serverausfall behandeln.

Vielleicht ist das ein völlig normaler Geschäftszustand.

409 kann auf Konflikte hinweisen

Zum Beispiel:

Ein Datensatz kann nicht angelegt werden, weil eine eindeutige ID bereits existiert.

409 Conflict

Das kann gerade bei automatisierten Imports relevant sein.

Vielleicht versucht der Workflow, denselben Datensatz zweimal zu erzeugen.

422 wird häufig für fachlich ungültige Eingaben verwendet

Beispielsweise:

JSON ist syntaktisch korrekt.

Aber:

email = "abc"

ist keine akzeptierte E-Mail-Adresse.

Nicht jede API verwendet diesen Status gleich.

Darum gilt auch hier:

Dokumentation lesen.

429 bedeutet Rate Limit erreicht

429 Too Many Requests

Der Client hat zu viele Anfragen in zu kurzer Zeit geschickt.

Das ist für Automatisierung besonders wichtig.

Ein Workflow darf nicht einfach noch schneller weiterfeuern.

Er sollte:

warten,

Retry-Regeln beachten,

eventuell Queue verwenden.

5xx bedeutet typischerweise serverseitigen Fehler

Beispiel:

500 Internal Server Error

Der API-Server konnte die Anfrage aufgrund eines internen Problems nicht verarbeiten.

Ein temporärer 500er kann ein Kandidat für einen Retry sein.

Aber auch hier sollten Wiederholungen begrenzt bleiben.

Statuscodes bestimmen die Fehlerstrategie

Ein sinnvoller Workflow könnte ungefähr unterscheiden:

200 / 201
→ Erfolg
400
→ Eingabedaten korrigieren
401
→ Credentials prüfen
403
→ Berechtigung prüfen
404
→ Ressource fehlt
429
→ warten / Rate Limit
500+
→ begrenzter Retry

Damit wird Fehlerbehandlung vorhersehbar.

Man sollte nicht nur auf den Statuscode schauen

Viele APIs liefern zusätzlich einen Response Body.

Beispielsweise:

{
  "error": "email_invalid",
  "message": "The email address is invalid."
}

Der maschinenlesbare Fehlercode:

email_invalid

ist für Automatisierung oft wertvoller als ein langer Text.

Fehlerantworten sollten möglichst strukturiert sein

Eine gute API könnte liefern:

{
  "error": {
    "code": "customer_not_found",
    "field": "customer_id",
    "retryable": false
  }
}

Nun kann ein Workflow exakt reagieren.

Genau dasselbe Prinzip kennen wir aus strukturierten KI-Ausgaben.

Eine API ist selbst eine strukturierte Schnittstelle

Das ist ein hilfreiches Gesamtbild.

Software A
↓
klarer Request
↓
API
↓
klarer Response
↓
Software B

KI-Systeme müssen sich in genau diese Welt einfügen.

Darum sind strukturierte Outputs für KI so wichtig.

Wie authentifiziert sich ein API-Client?

Eine API sollte normalerweise nicht jedem Internetnutzer Zugriff auf alle Daten geben.

Sie muss wissen:

Wer stellt die Anfrage?

Dafür existieren unterschiedliche Authentifizierungsverfahren.

Eine einfache Variante ist:

API-Key.

Was ist ein API-Key?

Ein Anbieter gibt einer Anwendung einen geheimen Schlüssel.

Zum Beispiel sinngemäß:

sk-123456...

Der Client übermittelt ihn bei der Anfrage.

Die API prüft:

Ist dieser Schlüssel gültig?

Wenn ja:

Anfrage zulassen.

API-Keys sollten wie Passwörter behandelt werden

Ein API-Key kann Zugriff auf:

Daten,

Geld,

KI-Kontingente,

Produktionssysteme

ermöglichen.

Deshalb gehört er nicht:

in öffentlichen Quellcode,

in Webseiten-JavaScript, wenn er geheim sein muss,

in Blogartikel,

in Prompts,

in Screenshots.

Secrets gehören in einen Secret Store

Zum Beispiel:

Workflow
↓
Secret Manager
↓
API-Key
↓
API

Der Workflow referenziert den Schlüssel.

Er muss nicht als Klartext in jeder Node stehen.

Das vereinfacht außerdem spätere Rotation.

Was bedeutet Key Rotation?

Ein Schlüssel sollte bei Bedarf ersetzt werden können.

Zum Beispiel:

alter Key
→ deaktivieren

neuer Key
→ verwenden

Wenn der Key an 80 Stellen hart eingetragen wurde, wird Rotation unangenehm.

Mit zentralem Secret Management ändert man ihn an einer Stelle.

API-Keys identifizieren häufig eher Anwendungen als einzelne Nutzer

Für manche Fälle reicht das.

Bei anderen muss eine API wissen:

Welcher konkrete Benutzer hat zugestimmt?

Dann kommen Verfahren wie OAuth ins Spiel.

Was ist OAuth?

OAuth ist ein Rahmenwerk zur delegierten Autorisierung.

Ein bekanntes Alltagsszenario:

Eine Anwendung möchte auf deinen Kalender zugreifen.

Du gibst ihr nicht einfach dein Google-Passwort.

Stattdessen:

Anwendung
↓
fragt um Berechtigung
↓
du meldest dich beim Dienst an
↓
du erlaubst bestimmte Rechte
↓
Anwendung erhält Token

Die Anwendung bekommt dadurch kontrollierten Zugriff.

OAuth trennt Passwort und App-Zugriff

Das ist ein großer Vorteil.

Die Drittanwendung muss dein eigentliches Kontopasswort nicht kennen.

Stattdessen erhält sie einen begrenzten Token.

Dieser kann beispielsweise erlauben:

Kalender lesen

aber nicht:

Gmail löschen

wenn entsprechende Scopes verwendet werden.

Was sind Scopes?

Scopes beschreiben Berechtigungsbereiche.

Beispielsweise:

calendar.read

oder:

calendar.write

Je kleiner die Berechtigung, desto besser.

Das ist wieder das Least-Privilege-Prinzip.

Ein Automatisierungsdienst sollte nur die Rechte bekommen, die er braucht

Wenn ein Workflow nur Beiträge erstellen soll:

Beiträge erstellen

ist ausreichend.

Er braucht möglicherweise keine Rechte für:

Benutzer löschen,

Plugins installieren,

Serverkonfiguration ändern.

Kleine Berechtigungen begrenzen Schäden bei Fehlern.

Tokens können ablaufen

Viele Authentifizierungssysteme verwenden zeitlich begrenzte Access Tokens.

Dann passiert irgendwann:

401

obwohl der Workflow gestern noch funktionierte.

Ein robustes System muss Token-Erneuerung beziehungsweise Refresh-Prozesse unterstützen, wenn das jeweilige Verfahren das vorsieht.

Authentifizierung und Autorisierung sind nicht dasselbe

Authentifizierung beantwortet:

Wer bist du?

Autorisierung:

Was darfst du?

Ein Benutzer kann erfolgreich authentifiziert sein.

Trotzdem darf er vielleicht:

Kunden lesen,

aber nicht löschen.

Diese Trennung ist zentral für APIs.

HTTPS ist für API-Kommunikation praktisch Pflicht

Wenn Zugangsdaten oder sensible Informationen übertragen werden, dürfen sie nicht unverschlüsselt durchs Netzwerk laufen.

Deshalb werden moderne Web-APIs über:

https://

angesprochen.

Unser Artikel SSL und HTTPS verständlich erklärt behandelt die technische Grundlage dafür.

Geheimnisse gehören nicht unnötig in URLs

Eine URL kann in:

Logs,

Browserhistorien,

Proxylogs,

Monitoring

landen.

Deshalb sollten geheime Tokens nicht leichtfertig als Query-Parameter übertragen werden, wenn die API einen sicheren Authentifizierungsheader vorsieht.

Was ist Rate Limiting?

Ein API-Anbieter möchte verhindern:

Ein einzelner Client schickt unbegrenzt viele Anfragen.

Darum kann er definieren:

100 Requests pro Minute

oder:

10.000 pro Tag

Solche Grenzen heißen Rate Limits.

Rate Limits schützen Infrastruktur

Ohne Grenze könnte:

eine fehlerhafte Schleife,

ein Bot,

ein Angreifer

Millionen Requests erzeugen.

Rate Limiting begrenzt diese Last.

Für Automatisierer sind Rate Limits Planungsdaten

Angenommen:

API erlaubt 100 Requests / Minute

Du musst:

100.000 Datensätze

übertragen.

Dann darf der Workflow nicht alles gleichzeitig starten.

Er braucht:

Batching,

Throttling,

Queue.

Manche APIs geben Rate-Limit-Informationen zurück

Zum Beispiel sinngemäß:

Limit: 100
Remaining: 17
Reset: ...

Ein intelligenter Client kann darauf reagieren.

Die genauen Header unterscheiden sich je nach API.

Deshalb gilt:

konkrete Dokumentation beachten.

Was bedeutet Pagination?

Eine API besitzt:

2 Millionen Bestellungen

Ein:

GET /orders

sollte nicht alle zwei Millionen Datensätze gleichzeitig liefern.

Darum werden Ergebnisse auf Seiten aufgeteilt.

Zum Beispiel:

page = 1
limit = 100

Das nennt man Pagination.

Seitenbasierte Pagination

Zum Beispiel:

GET /orders?page=3&per_page=100

Der Client lädt:

Seite 3.

Das ist leicht verständlich.

Bei stark veränderlichen Daten kann Seitenpagination allerdings Probleme verursachen.

Cursor-basierte Pagination

Eine API kann stattdessen einen Cursor zurückgeben.

{
  "data": [...],
  "next_cursor": "abc123"
}

Der nächste Request verwendet:

cursor=abc123

Damit weiß die API:

Wo soll sie fortsetzen?

Für große und sich laufend ändernde Datenmengen kann das robuster sein.

Ein Automatisierungsworkflow muss Pagination bewusst behandeln

Schlecht:

GET /customers
↓
100 Kunden erhalten
↓
fertig

obwohl tatsächlich:

10.000

existieren.

Vielleicht hat die API lediglich die erste Seite geliefert.

Das ist ein klassischer Integrationsfehler.

Pagination sollte bis zum tatsächlichen Ende laufen

Seite 1
↓
weitere vorhanden?
↓
Seite 2
↓
...
↓
keine weitere Seite

Auch dabei muss Rate Limiting berücksichtigt werden.

Große Imports sollten resumierbar sein

Der Workflow verarbeitet:

100.000 Datensätze.

Bei Datensatz 82.341:

Serverausfall.

Schlecht:

morgen wieder bei 1 anfangen.

Besser:

checkpoint = 82.340

und kontrolliert fortsetzen.

Das spart Zeit und verhindert Doppelverarbeitung.

Idempotenz spielt bei APIs eine große Rolle

Wir haben das im Artikel über Automatisierung bereits eingeführt.

Ein Client sendet:

POST /payments

Der Server verarbeitet die Zahlung.

Die Netzwerkverbindung bricht ab, bevor die Antwort ankommt.

Der Client weiß nicht:

Hat die Zahlung funktioniert?

Wenn er dieselbe Anfrage erneut sendet, könnte doppelt bezahlt werden.

Idempotency Keys lösen bestimmte Fälle

Ein Client kann einer Operation eine eindeutige Kennung geben.

Sinngemäß:

Idempotency-Key: order-payment-4711

Der Server merkt:

Diese Operation wurde bereits erfolgreich durchgeführt.

Ein identischer Retry erzeugt keine zweite Zahlung.

Ob eine API solche Mechanismen unterstützt, hängt vom Anbieter ab.

GET sollte typischerweise idempotent sein

Zehnmal:

GET /customers/4711

sollte den Kunden nicht zehnmal verändern.

Lesen verändert die Ressource normalerweise nicht.

PUT und DELETE können ebenfalls idempotente Semantik besitzen

Zweimal:

PUT status = active

führt zum selben Zustand:

active.

Zweimal:

DELETE resource

sollte nicht zwei unterschiedliche Löschungen auslösen.

POST ist dagegen häufig nicht automatisch idempotent.

Das ist bei Retry-Strategien wichtig.

APIs können synchron arbeiten

Client:

POST /reports

Server berechnet Bericht.

Client wartet.

Dann:

{
  "report": "..."
}

Das ist einfach.

Bei langen Aufgaben kann es problematisch werden.

Lange Jobs eignen sich für asynchrone APIs

Client startet:

POST /reports

Antwort:

{
  "job_id": "4711",
  "status": "queued"
}

Nun arbeitet der Server im Hintergrund.

Später:

GET /jobs/4711

Antwort:

{
  "status": "completed",
  "result_url": "..."
}

Das ist robuster für lange Berechnungen.

Noch eleganter: Webhook nach Abschluss

Statt ständig:

Ist Job 4711 fertig?

zu fragen, kann die Anwendung einen Callback beziehungsweise Webhook bereitstellen.

Job fertig
↓
API-Anbieter
↓
Webhook
↓
dein Workflow

Damit sehen wir bereits die direkte Verbindung zum nächsten Artikel.

Was ist ein API-Timeout?

Eine Anfrage läuft.

Nach:

30 Sekunden

noch keine Antwort.

Der Client beendet das Warten.

Das ist ein Timeout.

Ohne Timeouts könnte ein einzelner hängender API-Request einen Workflow sehr lange blockieren.

Timeout bedeutet nicht automatisch, dass serverseitig nichts passiert ist

Das ist wichtig.

Der Client wartet 30 Sekunden.

Timeout.

Der Server hat die Aktion vielleicht bei Sekunde 31 trotzdem abgeschlossen.

Genau deshalb sind:

Idempotenz,

Statusabfragen,

Operation IDs

bei kritischen Aktionen so wichtig.

Netzwerkfehler machen APIs zu verteilten Systemen

Auf einem einzelnen Programmrechner kann eine Funktion entweder:

laufen

oder:

Fehler werfen.

Bei APIs kommt das Netzwerk hinzu.

Vielleicht:

Request angekommen,

Response verloren.

Oder:

Request nie angekommen.

Oder:

Server verarbeitet noch.

Das macht Fehlerbehandlung anspruchsvoller.

Deshalb braucht ein guter API-Client klare Retry-Regeln

Zum Beispiel:

Timeout bei GET
→ vielleicht Retry
500
→ begrenzter Retry
429
→ warten
400
→ kein identischer Retry
POST Zahlung
→ nur mit Idempotenzschutz wiederholen

Ein allgemeines „bei Fehler dreimal wiederholen“ ist nicht immer sicher.

Was bedeutet API-Versionierung?

Eine Schnittstelle lebt.

Heute liefert:

{
  "name": "Anna"
}

Morgen möchte der Anbieter:

{
  "first_name": "Anna",
  "last_name": "Muster"
}

Wenn er die Struktur einfach plötzlich ändert, können tausende Integrationen brechen.

Darum brauchen APIs Versionierungsstrategien.

Version kann Teil der URL sein

Zum Beispiel:

/api/v1/customers

später:

/api/v2/customers

Beide Versionen können eine Zeit lang parallel existieren.

Das gibt Clients Zeit zur Migration.

Nicht jede API verwendet URL-Versionen

Versionierung kann auch über:

Header,

Medientypen,

andere Mechanismen

gelöst werden.

Wichtig ist nicht die konkrete Form.

Sondern:

Änderungen müssen kontrollierbar bleiben.

Breaking Changes sind besonders gefährlich

Ein Feld wird entfernt.

Datentyp ändert sich.

Endpoint verschwindet.

Authentifizierung wird umgestellt.

Bestehende Automatisierungen können sofort ausfallen.

Deshalb sollte man API-Änderungsankündigungen beobachten.

Deprecation bedeutet: Funktion soll künftig verschwinden

Ein Anbieter kann sagen:

Endpoint X ist deprecated.

Das bedeutet nicht unbedingt:

Er funktioniert heute nicht mehr.

Sondern:

Man sollte auf die neue Variante migrieren.

Automatisierungen sollten solche Warnungen nicht jahrelang ignorieren.

API-Versionen gehören ins technische Inventar

Für einen Workflow sollte bekannt sein:

Dienst:
CRM

API:
v3

Endpoint:
...

Authentifizierung:
OAuth

Verantwortlich:
...

Bei hundert Integrationen wird solches Inventar sehr wertvoll.

Was ist eine API-Dokumentation?

Sie beschreibt beispielsweise:

Endpoints,

Methoden,

Parameter,

Datenmodelle,

Authentifizierung,

Fehlercodes,

Rate Limits,

Beispiele.

Ohne gute Dokumentation wird Integration unnötig schwierig.

Gute API-Dokumentation enthält konkrete Beispiele

Zum Beispiel:

POST /customers

Request:

{
  "name": "Anna"
}

Response:

{
  "id": 4711,
  "name": "Anna"
}

Ein Entwickler kann damit sehr schnell beginnen.

Was ist OpenAPI?

OpenAPI ist eine standardisierte Beschreibung für HTTP-basierte APIs.

Damit kann maschinenlesbar dokumentiert werden:

welche Endpoints existieren,

welche Parameter erlaubt sind,

welche Datenmodelle verwendet werden,

welche Antworten möglich sind.

Das eröffnet viele Möglichkeiten.

Aus einer OpenAPI-Beschreibung können Werkzeuge erzeugt werden

Zum Beispiel:

interaktive Dokumentation,

Client-Code,

Server-Stubs,

Tests,

Validierung.

Eine API-Beschreibung wird damit nicht nur Text für Menschen.

Sondern eine maschinenlesbare Spezifikation.

OpenAPI passt hervorragend zu KI-Tools

Ein Agent muss wissen:

Welche Funktion existiert?

Welche Parameter?

Welche Datentypen?

Eine strukturierte API-Beschreibung kann dabei helfen, solche Werkzeuge kontrolliert bereitzustellen.

Das heißt nicht:

Jede OpenAPI-Schnittstelle sollte automatisch einem Agenten gegeben werden.

Berechtigungen bleiben entscheidend.

Was ist CORS?

Wenn eine Webseite im Browser direkt eine API auf einer anderen Domain aufrufen möchte, greift ein Sicherheitsmechanismus des Browsers namens:

Cross-Origin Resource Sharing, kurz CORS.

Beispiel:

frontend.example.com
↓
api.other-service.com

Der API-Server muss festlegen, ob solche Browserzugriffe erlaubt sind.

CORS ist hauptsächlich ein Browserproblem

Ein Server-to-Server-Workflow wie n8n oder Python ist nicht in derselben Weise von Browser-CORS-Regeln betroffen.

Das ist wichtig.

Viele Nutzer sehen:

CORS error

und denken:

Die API ist kaputt.

Vielleicht funktioniert die API serverseitig problemlos.

Nur der Browser blockiert den direkten Cross-Origin-Zugriff.

Geheime API-Keys gehören oft ohnehin nicht in Browsercode

Wenn eine API einen privaten Schlüssel verlangt:

Browser
↓
geheimer API-Key

wäre problematisch.

Jeder Nutzer könnte den Schlüssel möglicherweise auslesen.

Besser:

Browser
↓
eigener Backendserver
↓
geheimer API-Key
↓
externe API

Das Backend schützt das Secret.

Server-to-Server-APIs sind für Automatisierung besonders wichtig

n8n:

n8n
↓
API
↓
CRM

Hier läuft alles auf Servern.

Kein Browser muss beteiligt sein.

Dadurch sind viele Integrationen einfacher und sicherer umzusetzen.

APIs können Dateien übertragen

Nicht jede API transportiert nur JSON.

Eine Anwendung könnte:

PDF hochladen,

Bild herunterladen,

CSV exportieren.

Dafür existieren entsprechende Content-Types und Upload-Verfahren.

Der Workflow muss wissen:

Handelt es sich um strukturierte Daten oder Binärdateien?

Datei-Metadaten sollten separat behandelt werden

Zum Beispiel:

{
  "filename": "rechnung.pdf",
  "content_type": "application/pdf",
  "size": 183742
}

Die eigentlichen Dateibytes werden vielleicht separat übertragen.

Das ist häufig sauberer als riesige Dateien als Text in JSON einzubetten.

Was bedeutet Base64?

Binärdaten können in eine Textdarstellung namens Base64 umgewandelt werden.

Dann könnten sie theoretisch innerhalb eines JSON-Feldes übertragen werden.

Das vergrößert die Daten jedoch.

Für große Dateien sind direkte Upload- beziehungsweise Downloadmechanismen häufig besser.

APIs können Suchfunktionen anbieten

Beispiel:

GET /articles?query=caching

oder:

POST /search

mit komplexeren Parametern.

Eine semantische Suche kann damit ebenfalls als API angeboten werden.

RAG besteht oft aus mehreren APIs

Beispielsweise:

Nutzerfrage
↓
Embedding API
↓
Vector Search API
↓
Dokument API
↓
LLM API
↓
Antwort

Oder alles läuft lokal innerhalb eines Systems.

Für den Workflow ist entscheidend:

Welche Schnittstellen stehen zur Verfügung?

Eine lokale KI kann ebenfalls eine API anbieten

Das ist sehr wichtig.

Ein lokal laufendes Sprachmodell muss nicht direkt in n8n eingebaut werden.

Es kann eine HTTP-Schnittstelle bereitstellen.

n8n
↓
HTTP
↓
lokaler KI-Server
↓
Antwort

Dadurch wird lokale KI genauso integrierbar wie ein Cloudmodell.

Das schafft Austauschbarkeit

Heute:

Workflow
↓
Cloud-KI-API

morgen:

Workflow
↓
lokale KI-API

Wenn beide über eine vergleichbare interne Schnittstelle angesprochen werden, muss der Workflow nicht vollständig neu gebaut werden.

Ein interner API-Adapter kann Anbieterunterschiede verstecken

Zum Beispiel:

Workflow
↓
/internal/llm
↓
Adapter
│
├── Anbieter A
├── Anbieter B
└── lokales Modell

Der Workflow kennt nur:

/internal/llm

Das reduziert Anbieterabhängigkeit.

APIs sind damit auch Abstraktionsschichten

Die Anwendung muss nicht wissen:

Welche Datenbank?

Welcher Modellanbieter?

Welche interne Programmiersprache?

Sie kennt nur den Vertrag:

Request rein
Response raus

Das macht Systeme austauschbarer.

APIs können sehr kleine Funktionen kapseln

Zum Beispiel:

POST /normalize-address

Eingabe:

{
  "address": "..."
}

Ausgabe:

{
  "street": "...",
  "postal_code": "...",
  "city": "..."
}

Solche kleinen Services können wiederverwendbare Bausteine einer Automatisierungsplattform werden.

Eine API sollte möglichst eine klare Verantwortung besitzen

Schlecht:

POST /doEverything

mit 80 Optionen.

Besser:

klar definierte Ressourcen beziehungsweise Funktionen.

Das erleichtert:

Tests,

Berechtigungen,

Dokumentation,

Fehlerbehandlung.

API-Design und Workflow-Design ähneln sich

Beide profitieren von:

kleinen Verantwortungsbereichen,

klaren Datenmodellen,

eindeutigen Zuständen,

stabilen Schnittstellen.

Eine chaotische API erzeugt chaotische Automatisierungen.

Ein häufiger Fehler: Datenbank direkt statt API verwenden

Wenn zwei eigene Systeme unter vollständiger Kontrolle stehen, kann direkter Datenbankzugriff manchmal sinnvoll sein.

Bei fremder Software ist er oft problematisch.

Warum?

Die interne Datenbankstruktur ist keine garantierte Schnittstelle.

Ein Update kann Tabellen verändern.

Die API ist dagegen genau dafür gedacht:

externe Programme anzubinden.

WordPress ist ein gutes Beispiel

Man könnte einen Beitrag theoretisch direkt in:

wp_posts

schreiben.

Aber WordPress besitzt mehr Logik als nur eine Tabellenzeile.

Es gibt:

Metadaten,

Hooks,

Revisionen,

Berechtigungen,

Caches,

Plugins.

Der vorgesehene Programmpfad ist deshalb meist besser.

WordPress besitzt eine REST API

Über die WordPress REST API können Inhalte programmgesteuert gelesen und – bei entsprechender Authentifizierung und Berechtigung – verändert werden.

Ein typischer API-Pfad sieht konzeptionell aus wie:

/wp-json/wp/v2/posts

Damit können Anwendungen Beiträge als strukturierte Daten abrufen beziehungsweise erstellen.

Einen WordPress-Beitrag über API anlegen

Ein automatisierter Prozess könnte beispielsweise senden:

{
  "title": "Was ist eine API?",
  "content": "<p>...</p>",
  "status": "draft"
}

WordPress erzeugt daraus einen Entwurf.

Der Workflow muss nicht:

Browser öffnen,

wp-admin laden,

Felder anklicken.

Das ist für Content-Automatisierung enorm wertvoll

Ein Workflow könnte:

Thema
↓
Recherche
↓
Text
↓
Qualitätsprüfung
↓
WordPress REST API
↓
Entwurf

Damit entsteht ein Artikel bereits im CMS.

Ein Mensch kann ihn anschließend prüfen und veröffentlichen.

Kategorien können ebenfalls als IDs übergeben werden

Angenommen:

Kategorie-ID 17
→ KI & Automatisierung

Dann kann der Workflow:

{
  "categories": [17]
}

übergeben.

Das ist besser, als die KI raten zu lassen:

Wie heißt die Kategorie vermutlich genau?

Wieder gilt:

IDs aus dem CMS.

Nicht erfinden.

Medien können ebenfalls automatisiert verarbeitet werden

Ein Prozess könnte:

Bild erzeugen beziehungsweise auswählen,

Bild hochladen,

Media-ID erhalten,

diese ID dem Beitrag zuweisen.

Bild
↓
WordPress Media API
↓
media_id
↓
Beitrag

Solche Prozesse bestehen meist aus mehreren API-Aufrufen.

API-Aufrufe sollten Ergebnisse weiterreichen

Beispiel:

Schritt 1:

POST image

Response:

{
  "id": 821
}

Schritt 2 verwendet:

featured_media = 821

Das ist ein typischer Workflow.

Jeder Schritt erzeugt strukturierte Daten für den nächsten.

Fehlgeschlagene Zwischenschritte müssen gestoppt werden

Bild-Upload scheitert.

Trotzdem veröffentlicht der Workflow den Artikel mit einer erfundenen Media-ID.

Schlecht.

Besser:

Upload fehlgeschlagen
↓
Workflow stoppen oder ohne Bild fortsetzen,
wenn ausdrücklich erlaubt

Der Fehlerpfad muss vorher definiert sein.

API-Antworten sollten nie ungeprüft verwendet werden

Ein Endpoint liefert:

{
  "status": "error"
}

HTTP-Code aber vielleicht trotzdem 200.

Solche APIs existieren.

Daher muss die Dokumentation berücksichtigt werden.

Manche Systeme signalisieren Fehler:

über HTTP-Code,

andere zusätzlich:

über Body-Felder.

API-Wrapper können schlechte externe Schnittstellen verbessern

Wenn eine Drittanbieter-API unpraktisch ist, kann ein eigener interner Service davor geschaltet werden.

Workflow
↓
eigene saubere API
↓
komische Fremd-API

Der Wrapper übersetzt:

Datenformate,

Fehlercodes,

Authentifizierung.

Der Rest des Systems bleibt sauber.

APIs sollten geloggt werden – aber nicht blind vollständig

Logging kann erfassen:

Endpoint.

Statuscode.

Laufzeit.

Request-ID.

Aber Vorsicht:

Request- oder Response-Bodies können enthalten:

Passwörter,

Tokens,

personenbezogene Daten.

Logs dürfen nicht versehentlich zum Datenleck werden.

Secrets müssen aus Logs entfernt werden

Zum Beispiel:

Authorization: Bearer ***

statt:

komplettes Token.

Auch Kreditkartendaten oder sensible Kundendaten sollten nicht unnötig in Debug-Logs landen.

Eine Request-ID hilft bei Fehlersuche

Der API-Anbieter liefert beispielsweise:

request_id = abc123

Support kann dann genau diese Anfrage finden.

Auch dein eigener Workflow sollte möglichst mit:

Correlation IDs

arbeiten.

Das verbindet Logs über mehrere Systeme hinweg.

APIs brauchen Monitoring

Interessante Kennzahlen:

Requests pro Minute

Erfolgsrate

4xx-Rate

5xx-Rate

P95-Latenz

Rate-Limit-Fehler

Damit erkennt man:

Funktioniert die Integration?

Ein plötzlicher Anstieg von 401-Fehlern hat eine andere Ursache als 500er

401 steigt
→ wahrscheinlich Authentifizierung
429 steigt
→ Rate-Limit / Last
500 steigt
→ Serverproblem

Monitoring beschleunigt Diagnose erheblich.

APIs können Verträge mit Service-Leveln besitzen

Ein Anbieter verspricht vielleicht:

bestimmte Verfügbarkeit,

bestimmte Antwortzeiten,

bestimmte Kontingente.

Für geschäftskritische Automatisierungen sollte man prüfen:

Was passiert bei Ausfall?

Existiert Ersatz?

Kann der Workflow später nacharbeiten?

Externe APIs sind Abhängigkeiten

Wenn dein gesamter Prozess von einem SaaS-Dienst abhängt:

Dienst offline

→ Workflow steht.

Deshalb sollte man Abhängigkeiten bewusst dokumentieren.

Content Workflow
abhängig von:
- Recherche API
- LLM API
- WordPress API

Nun ist klar, wo Fehler entstehen können.

Circuit Breaker können bei wiederholten API-Ausfällen helfen

Stell dir vor, ein Dienst ist offline.

Tausend Jobs versuchen jede Sekunde erneut.

Das verschärft die Situation.

Ein Circuit Breaker kann sinngemäß sagen:

zu viele Fehler
↓
vorübergehend keine neuen Requests
↓
nach Wartezeit vorsichtig erneut testen

Das schützt beide Systeme.

API-Aufrufe sollten oft über zentrale Komponenten laufen

Wenn 50 Workflows denselben Dienst nutzen, ist es unpraktisch, überall:

Authentifizierung,

Retrylogik,

Rate-Limit-Handling

neu zu bauen.

Besser:

eine wiederverwendbare Integrationskomponente.

Ein CRM-Connector könnte beispielsweise kapseln

find_customer()

create_customer()

update_customer()

create_note()

Die darunterliegende API kann sich ändern.

Die Workflows verwenden weiterhin dieselben internen Funktionen.

Das macht Systeme wartbarer.

APIs ermöglichen Tool Calling für Sprachmodelle

Ein Sprachmodell kann eine Anfrage verstehen:

Wie viele offene Rechnungen hat Anna?

Das Modell sollte diese Zahl nicht erraten.

Stattdessen:

{
  "tool": "get_open_invoices",
  "customer_id": 4711
}

Die Anwendung führt einen API-Aufruf aus.

Die API liefert reale Daten

{
  "open_invoices": 3,
  "total_amount": 428.70,
  "currency": "EUR"
}

Das LLM formuliert:

Anna hat derzeit drei offene Rechnungen mit insgesamt 428,70 Euro.

Damit kommt der Fakt aus der Datenquelle.

Das Sprachmodell übernimmt Sprache und Interpretation.

Das ist wesentlich robuster als Modellgedächtnis

LLM-Wissen
→ möglicherweise veraltet
API
→ aktueller Systemzustand

Für operative Informationen sollte die API häufig die Source of Truth sein.

Tool Calling sollte erlaubte Funktionen begrenzen

Ein Finanzassistent braucht vielleicht:

get_balance
get_transactions

Nicht automatisch:

transfer_all_money

Die API-Schicht bietet nur Funktionen an, die der konkrete Assistent benötigt.

APIs können Berechtigungen pro Tool erzwingen

Selbst wenn das LLM versucht:

delete_customer

und dieses Tool existiert nicht:

keine Aktion.

Wenn Tool existiert, prüft API trotzdem:

Darf dieser Benutzer löschen?

Damit entsteht Defense in Depth.

KI-Agenten werden dadurch erst praktisch

Ein Agent ohne Werkzeuge kann hauptsächlich:

denken,

schreiben,

planen.

Mit APIs kann er:

Kalender lesen,

Dokumente suchen,

CRM abfragen,

Tickets erstellen.

Das erhöht seine Fähigkeiten erheblich.

Aber auch sein Risiko.

Darum ist API-Design Agentensicherheit

Wenn APIs:

zu mächtig,

schlecht berechtigt,

unklar

sind, wird ein Agent schwer kontrollierbar.

Kleine, klar begrenzte Tools sind sicherer.

Zum Beispiel:

create_email_draft

ist sicherer als:

send_any_email_to_anyone

wenn menschliche Freigabe gewünscht ist.

Ein API-Tool kann zunächst nur einen Entwurf erzeugen

KI
↓
create_draft
↓
Mensch prüft
↓
send

Das ist ein sehr starkes Automatisierungsmuster.

Die API unterstützt dabei bewusst den Freigabeprozess.

Gute APIs machen sichere Prozesse einfacher

Wenn eine Schnittstelle bereits Funktionen besitzt wie:

draft
approve
execute

kann ein Workflow diese Zustände sauber abbilden.

Eine einzige Funktion:

do_everything

macht Kontrolle schwieriger.

APIs sollten Eingaben serverseitig validieren

Ein Client sendet:

{
  "amount": -500
}

Selbst wenn die Clientsoftware diesen Wert normalerweise verhindert:

Der Server muss ihn trotzdem prüfen.

Warum?

Clients können:

Fehler haben,

manipuliert werden,

anders implementiert sein.

Die API ist eine Vertrauensgrenze.

Niemals nur auf Client-Validierung verlassen

Frontend sagt:

Betrag maximal 10.000.

Ein Angreifer ruft API direkt auf:

{
  "amount": 100000000
}

Wenn Server nicht prüft:

Problem.

Alle kritischen Regeln gehören serverseitig erzwungen.

Dasselbe gilt bei KI

Das Modell liefert strukturiert:

{
  "refund_amount": 100000
}

Die API muss selbst prüfen:

Darf dieser Betrag erstattet werden?

Wer hat freigegeben?

Existiert die Zahlung?

KI-Ausgaben sind Input.

Nicht Wahrheit.

API-Validierung und Structured Output ergänzen sich

LLM
↓
Schema-konforme Daten
↓
API
↓
erneute fachliche Validierung

Das ist keine unnötige Doppelarbeit.

Jede Ebene schützt ihre eigene Grenze.

Eine API sollte keine internen Fehlerdetails verraten

Schlecht:

SQL password = ...
Stack trace ...
internal path ...

in einer öffentlichen Fehlermeldung.

Besser:

{
  "error": "internal_error",
  "request_id": "abc123"
}

Die technischen Details bleiben in internen Logs.

API-Sicherheit umfasst mehr als Authentifizierung

Weitere Themen:

Berechtigungen,

Input Validation,

Rate Limits,

Logging,

Netzwerkzugriff,

HTTPS,

Secret Management.

APIs sind attraktive Angriffsflächen, weil sie direkt Funktionen eines Systems zugänglich machen.

Private APIs können Netzwerkzugriff begrenzen

Eine interne Service-API muss vielleicht gar nicht öffentlich im Internet erreichbar sein.

internes Netzwerk
↓
API

statt:

gesamtes Internet
↓
API

Das reduziert die Angriffsfläche.

Lokale KI-APIs sollten ebenfalls nicht unnötig offen sein

Ein lokal laufendes Modell könnte theoretisch erreichbar sein über:

0.0.0.0:Port

Wenn Firewall und Authentifizierung fehlen, kann daraus ein öffentlich erreichbarer Dienst werden.

Auch lokale APIs brauchen saubere Netzwerksicherheit.

Eine API ist nicht automatisch sicher, nur weil sie „intern“ heißt

Ein kompromittierter interner Rechner kann ebenfalls auf Dienste zugreifen.

Deshalb bleiben:

Authentifizierung,

Autorisierung,

Logging

sinnvoll.

APIs können über Reverse Proxies geschützt werden

Ein Reverse Proxy kann beispielsweise übernehmen:

TLS.

Authentifizierung.

Rate Limiting.

Logging.

Routing.

Dann liegen mehrere interne Dienste hinter einer kontrollierten Eingangsschicht.

Das kann lokale KI-Infrastruktur übersichtlicher machen.

API-Gateways gehen noch weiter

Ein API-Gateway kann zentral verwalten:

Authentifizierung,

Rate Limits,

Versionen,

Routing,

Monitoring.

Bei wenigen eigenen Diensten kann das Overkill sein.

Bei vielen Microservices wird es interessanter.

Microservices kommunizieren häufig über APIs

Statt einer großen Anwendung existieren getrennte Services:

User Service
Order Service
Payment Service
AI Service

Sie kommunizieren über Schnittstellen.

Das erhöht Modularität.

Aber auch:

Netzwerkkomplexität,

Monitoringbedarf,

Fehlerfälle.

Microservices sind daher kein automatisches Qualitätsmerkmal.

Für kleine Systeme ist ein Monolith häufig völlig ausreichend

Eine Anwendung kann:

Datenbank,

Logik,

API

in einem Projekt enthalten.

Das kann einfacher zu betreiben sein.

Eine API kann trotzdem nach außen eine saubere Schnittstelle anbieten.

Architektur sollte der tatsächlichen Größe folgen.

Was bedeutet SDK?

Ein API-Anbieter kann zusätzlich eine Softwarebibliothek anbieten.

Beispielsweise für:

Python,

JavaScript,

PHP.

Diese Bibliothek nennt man häufig SDK, Software Development Kit.

Statt HTTP manuell zu bauen:

POST ...
Header ...
JSON ...

kann man schreiben:

client.create_customer(...)

Das SDK erledigt die Details.

SDK und API sind nicht dasselbe

API:

technische Schnittstelle.

SDK:

Hilfswerkzeug für Entwickler, um diese Schnittstelle leichter zu verwenden.

Wenn das SDK schlecht oder nicht verfügbar ist, kann die API oft weiterhin direkt angesprochen werden.

Für n8n braucht man häufig gar kein SDK

Viele Dienste besitzen fertige Nodes.

Wenn nicht:

HTTP Request Node.

Damit können REST-APIs direkt verwendet werden.

Das macht offene APIs besonders wertvoll.

Eine API kann dadurch Dienste integrierbar machen, die n8n nicht direkt kennt

Solange dokumentiert ist:

URL.

Methode.

Authentifizierung.

Request.

Response.

kann ein generischer HTTP-Client ausreichen.

Das ist ein wichtiger Vorteil offener Webstandards.

APIs ermöglichen Automatisierung unabhängig von Benutzeroberflächen

Weboberflächen ändern sich:

Button verschoben.

HTML neu gestaltet.

CSS-Klasse geändert.

Eine Browserautomation kann daran brechen.

Eine stabile API bleibt möglicherweise unverändert.

Deshalb ist API-basierte Integration häufig robuster als Screen Scraping.

Browserautomation hat trotzdem ihren Platz

Manche Systeme besitzen keine API.

Dann kann ein Browserbot:

klicken,

Formulare ausfüllen,

Daten ablesen.

Das ist möglich.

Aber meistens fragiler.

Wenn eine ordentliche API existiert:

bevorzugen.

Was ist Scraping im Vergleich zur API?

Scraping:

Webseite für Menschen
↓
Information herauslesen

API:

Schnittstelle für Programme
↓
strukturierte Information

Die API ist normalerweise die sauberere Datenquelle.

Eine API kann jedoch eingeschränkter sein als die Benutzeroberfläche

Manchmal kann der Mensch in der Webanwendung eine Funktion nutzen, die API bietet sie aber nicht an.

Dann muss entschieden werden:

API erweitern?

anderes Integrationsverfahren?

manueller Schritt?

Nicht jede Funktion ist automatisch automatisierbar.

API-Zugriff kann kostenpflichtig sein

Ein Produkt kann anbieten:

kostenlose Weboberfläche,

aber:

API nur in höherem Tarif.

Für Automatisierungsplanung sollte daher früh geprüft werden:

Existiert API?

Welche Funktionen?

Welche Limits?

Welche Kosten?

Kosten skalieren mit automatisierter Nutzung

Eine Anfrage kostet vielleicht:

0,001 Euro.

Bei:

10 Millionen Requests

wird das relevant.

Deshalb gehören API-Gebühren in die Wirtschaftlichkeitsrechnung eines Workflows.

Caching kann API-Aufrufe reduzieren

Eine Information ändert sich nur einmal täglich.

Workflow fragt sie:

100.000-mal.

Besser:

API
↓
einmal abrufen
↓
Cache
↓
wiederverwenden

Das spart:

Kosten,

Latenz,

Rate-Limit-Kontingent.

Aber Cache braucht Aktualisierungsregeln

Preis geändert.

Cache zeigt alten Preis.

Damit entsteht wieder das bekannte Problem:

Performance
↔
Aktualität

Der Artikel Caching einfach erklärt behandelt dieses Grundprinzip ausführlich.

Webhooks können Cache-Aktualisierung auslösen

Beispiel:

Produkt geändert.

Quellsystem sendet:

Webhook.

Workflow:

Produktänderung
↓
Cache invalidieren

Damit müssen wir nicht ständig pollen.

Das ist eine elegante Kombination aus:

API,

Webhook,

Cache.

APIs sind häufig für Abruf und Aktionen zuständig

API
→ Frag mich etwas

Webhooks:

Webhook
→ Ich sage dir von selbst,
   dass etwas passiert ist

Diese beiden Konzepte ergänzen sich hervorragend.

Ein Beispiel: Shop und CRM

Neue Bestellung.

Shop sendet Webhook:

order.created

Workflow erhält:

order_id = 4711

Nun verwendet Workflow die Shop-API:

GET /orders/4711

und lädt die vollständigen Bestelldaten.

Danach verwendet er CRM-API:

POST /customers

oder:

PATCH /customers/...

Webhook startet.

APIs erledigen die Kommunikation.

Genau deshalb folgt nach APIs logischerweise Webhooks

Die beiden Begriffe gehören zusammen, sollten aber nicht verwechselt werden.

API:

Client initiiert Kommunikation.

Webhook:

Quellsystem initiiert Benachrichtigung.

Dieses Muster ist die Grundlage sehr vieler Automatisierungen.

Was du dir über APIs merken solltest

Eine API ist eine definierte Schnittstelle, über die Software mit anderer Software kommunizieren kann.

Statt interne Datenbanken oder Benutzeroberflächen direkt zu manipulieren:

Anwendung
↓
API
↓
anderes System

Die API definiert:

welche Funktionen verfügbar sind

welche Daten erwartet werden

wie Daten übertragen werden

wie Fehler aussehen

wer welche Aktionen ausführen darf

Bei Web-APIs erfolgt die Kommunikation häufig über HTTP.

Das Grundmodell lautet:

Client
↓
Request
↓
API-Server
↓
Response
↓
Client

Ein Endpoint bezeichnet dabei einen konkreten API-Zugriffspunkt.

Zum Beispiel:

/customers/4711

HTTP-Methoden drücken häufig die gewünschte Operation aus.

GET
→ lesen

POST
→ erstellen / Aktion auslösen

PUT
→ ersetzen

PATCH
→ teilweise ändern

DELETE
→ entfernen

Daten werden häufig als JSON übertragen.

{
  "id": 4711,
  "status": "active"
}

Damit passen APIs perfekt zu strukturierten KI-Ausgaben.

Freitext
↓
LLM
↓
strukturierte Daten
↓
API
↓
reales System

HTTP-Statuscodes zeigen, wie eine Anfrage verlaufen ist.

2xx
→ Erfolg

4xx
→ Problem mit Anfrage,
   Authentifizierung oder Berechtigung

5xx
→ serverseitiges Problem

Wichtige Einzelfälle sind beispielsweise:

401
→ Authentifizierung

403
→ Berechtigung

404
→ Ressource fehlt

429
→ Rate Limit

500
→ Serverfehler

Ein robuster Workflow behandelt diese Fehler unterschiedlich.

APIs benötigen außerdem geeignete Authentifizierung.

Beispiele:

API-Key

OAuth

Access Tokens

Geheime Zugangsdaten gehören dabei nicht in:

Prompts,

öffentlichen Code,

Logs.

Sie gehören in eine kontrollierte Secret-Verwaltung.

Für große Datenmengen kommen weitere Konzepte hinzu:

Pagination

Rate Limiting

Queues

Retries

Idempotenz

Timeouts

Gerade Idempotenz ist für kritische Aktionen wichtig.

Wenn ein API-Request wegen eines Netzwerkfehlers wiederholt wird, darf eine Zahlung beispielsweise nicht versehentlich zweimal ausgeführt werden.

APIs können zusätzlich versioniert werden.

/v1/
↓
/v2/

Damit lassen sich Schnittstellen weiterentwickeln, ohne bestehende Integrationen sofort zu zerstören.

Und APIs sind nicht auf fremde Cloud-Dienste beschränkt.

Auch:

WordPress,

lokale KI-Server,

eigene Datenbanken,

interne Microservices

können definierte APIs bereitstellen.

Dadurch lässt sich eine sehr flexible Architektur aufbauen:

Automatisierung
│
├── WordPress API
├── CRM API
├── Daten-API
├── lokale KI API
└── externe Dienste

Der Workflow muss nicht wissen, wie diese Systeme intern funktionieren.

Er braucht lediglich den veröffentlichten Schnittstellenvertrag.

Für KI ist das besonders wichtig.

Ein Sprachmodell sollte operative Fakten nicht erfinden.

Statt:

LLM:
"Der Kunde hat vermutlich drei offene Rechnungen."

besser:

LLM
↓
get_open_invoices
↓
API
↓
3
↓
LLM formuliert

Damit entsteht eine klare Aufgabenteilung:

API
→ liefert tatsächlichen Systemzustand

LLM
→ versteht und formuliert

Workflow
→ orchestriert

Softwarelogik
→ validiert und entscheidet

Mensch
→ kontrolliert kritische Fälle

Und genau dadurch wird eine API zu weit mehr als nur einem technischen Entwicklerbegriff.

Sie ist eine der zentralen Grundlagen dafür, dass moderne Softwaresysteme, Automatisierungen und KI-Komponenten überhaupt zuverlässig miteinander arbeiten können.