TEKO Schweizerische FachschuleEAI IntegrationslaborTheorie · API-Verträge

Theorie 02 · Vertrag

HTTP und
API-Verträge

Eine API ist keine Sammlung zufälliger URLs. Sie ist ein überprüfbares Versprechen über Ressourcen, Eingaben, Ergebnisse, Fehler und Sicherheit.

HTTPRESTOpenAPIJSON Schemaca. 18 min
Lernziele
Du kannst einen HTTP-Austausch zerlegen, Methoden und Statuscodes semantisch einsetzen, einen API-Vertrag beurteilen und Fehler, Versionierung sowie Sicherheit in Handels- und Spital-APIs erklären.
Grundmodell

Request hinein, Response zurück

HTTP ist ein Anwendungsprotokoll für den Austausch von Nachrichten. Ein Client sendet einen Request an einen Server. Der Request besteht aus Methode, URL, Headern und optional einem Body. Der Server antwortet mit Statuscode, Headern und optional einem Body. Diese Teile haben unterschiedliche Aufgaben: Die URL identifiziert das Ziel, ein Header transportiert Kontext wie Medientyp oder Berechtigung und der Body enthält die eigentlichen Nutzdaten.

REST ist ein Architekturstil. Eine REST-orientierte API stellt Ressourcen über stabile Adressen bereit und nutzt die Semantik von HTTP. GET liest, ohne den fachlichen Zustand zu verändern. POST stösst eine Verarbeitung an oder legt eine Ressource unter serverseitig bestimmter ID an. PUT ersetzt den Zustand einer bekannten Ressource und ist grundsätzlich idempotent. PATCH beschreibt eine Teiländerung; ob deren Wiederholung sicher ist, hängt vom Patch-Vertrag ab. DELETE entfernt die adressierte Ressource fachlich oder technisch.

„Idempotent“ bedeutet: Mehrfache identische Ausführung hat denselben beabsichtigten fachlichen Effekt wie eine Ausführung. Das garantiert nicht denselben Statuscode. Das erste DELETE kann mit 204 antworten, das zweite mit 404; die Ressource bleibt dennoch gelöscht. Diese Unterscheidung wird wichtig, sobald Timeouts und Wiederholungen auftreten.

Zeichnung

Die Anatomie einer API-Nachricht

HTTP-Request und HTTP-Response zwischen Client, Gateway und Service Ein Request mit Methode, Pfad, Headern und JSON-Body bewegt sich vom Client über ein API-Gateway zum Fachservice. Die Response kommt mit Statuscode, Headern und Ergebnis oder Fehler zurück. Client Shop · KIS Gateway Zutritt · Routing Service Fachlogik REQUEST POST /orders · Authorization Body: JSON nach Schema RESPONSE 201 Created · Location oder 422 + Fehlerobjekt
Wichtig: Das Gateway kontrolliert den Zugang und leitet weiter. Ob eine Bestellung zulässig oder eine Studie vollständig ist, entscheidet der verantwortliche Fachservice.
Vertrag

Mehr als ein Beispiel-JSON

Ein API-Vertrag beschreibt, worauf sich Anbieter und Konsumenten verlassen dürfen: Pfade, Methoden, Parameter, Header, Authentifizierung, Datenschemas, Statuscodes und Fehler. OpenAPI kann diesen Vertrag maschinenlesbar dokumentieren. JSON Schema beschreibt unter anderem Pflichtfelder, Datentypen, Wertebereiche, Formate und erlaubte zusätzliche Felder. Ein Beispiel zeigt nur einen möglichen Fall; ein Schema beschreibt die Menge erlaubter Fälle.

Die fachliche Bedeutung gehört ebenfalls zum Vertrag. Das Feld quantity: 3 ist syntaktisch eindeutig, aber ohne Einheit und Regel möglicherweise unklar. Darf die Menge null sein? Sind Dezimalwerte erlaubt? Bezieht sich ein Datum auf UTC oder die Zeitzone Europe/Zurich? Ist customerId eine Shop-ID oder eine ERP-ID? Gute Beschreibungen machen solche Annahmen sichtbar.

Verträge sollten möglichst rückwärtskompatibel wachsen. Ein optionales Feld lässt sich häufig hinzufügen, ohne alte Konsumenten zu brechen. Das Umbenennen oder Entfernen eines Pflichtfeldes ist dagegen eine brechende Änderung. Versionierung ist kein Ersatz für Planung: Zu viele parallele Versionen erhöhen Test- und Betriebskosten.

Ergebnis

Statuscodes und Fehler sind Teil der Fachsprache

Statuscodes geben eine erste Klasse des Ergebnisses an. 200 steht für eine erfolgreiche Antwort, 201 für eine neu angelegte Ressource, 202 für angenommene, aber noch nicht abgeschlossene Verarbeitung und 204 für Erfolg ohne Body. 400 signalisiert eine unbrauchbare Anfrage, 401 fehlende oder ungültige Anmeldung, 403 fehlende Berechtigung, 404 eine unbekannte Ressource, 409 einen Zustandskonflikt, 422 fachlich nicht verarbeitbare Daten und 429 eine überschrittene Begrenzung. Serverfehler liegen im Bereich 5xx.

Der Statuscode allein genügt für die Diagnose selten. Ein stabiles Fehlerobjekt sollte einen maschinenlesbaren Typ, einen verständlichen Titel, Detailinformationen, betroffene Felder und eine Correlation-ID enthalten. Interne Stacktraces, Datenbanknamen oder geheime Werte gehören nicht in eine öffentliche Antwort. Ein Konsument muss technische Fehler anders behandeln können als fachliche Ablehnungen.

Beispiele

Handel und Spital

Handel

GET /products/KT-100/availability liest Bestand und Preis. POST /order-drafts erstellt mit einer externen Bestellreferenz einen Entwurf. Eine unbekannte SKU ist kein Netzwerkfehler, sondern eine fachliche Ablehnung. Der Vertrag muss Währung, Mengeneinheit und Bedeutung von „verfügbar“ definieren.

Spital

GET /studies/{id} kann Metadaten einer synthetischen DICOM-Studie liefern. Ein technischer Orthanc-Identifier und die DICOM StudyInstanceUID sind getrennte Felder. Fehlende Pflicht-Tags oder eine noch unvollständige Serie benötigen ein anderes Ergebnis als ein nicht erreichbarer DICOM-Server. Echte Patientendaten gehören nicht ins Unterrichtslabor.

Metapher

Speisekarte und Bestellzettel

Die Metapher: Eine API-Dokumentation ist wie eine Speisekarte: Sie nennt verfügbare Leistungen und erwartete Angaben. Der HTTP-Request ist der Bestellzettel, die Methode beschreibt die gewünschte Aktion und die Antwort bestätigt Annahme, Ergebnis oder Problem. Ein standardisiertes Fehlerobjekt entspricht einer klaren Rückmeldung wie „Gericht nicht verfügbar“ statt dem unbrauchbaren Satz „Es ging etwas schief“.

Die Grenze: Ein Restaurantgespräch ist flexibel, ein Softwarevertrag muss präzise und automatisiert prüfbar sein. APIs verarbeiten außerdem parallele Anfragen, Teilfehler und Wiederholungen. Die Metapher erklärt nicht Idempotenz, Autorisierung oder verteilte Zustände vollständig.

Gegenbeispiel

Immer 200, egal was passiert

Eine API antwortet auch bei ungültiger SKU mit 200 OK und dem Body {"success":false}. Gateways, Monitoring und Standardbibliotheken erkennen den Fehler nicht zuverlässig. Ein anderer Endpunkt liefert für denselben Fall 500 und ein dritter einen deutschen Freitext. Diese API ist technisch erreichbar, besitzt aber keinen konsistenten Fehlervertrag und lässt sich schlecht automatisiert testen.

Entscheiden

Praktische Regeln

  1. Entwirf zuerst Ressourcen, fachliche Begriffe und Fehler, danach konkrete URLs.
  2. Nutze HTTP-Methoden und Statuscodes entsprechend ihrer Semantik.
  3. Definiere IDs, Einheiten, Zeitzonen, Nullwerte und Wertebereiche explizit.
  4. Dokumentiere den Vertrag maschinenlesbar und prüfe Requests sowie Responses dagegen.
  5. Füge Felder bevorzugt kompatibel hinzu; versioniere nur bei tatsächlich brechenden Änderungen.
  6. Trenne Authentifizierung, Autorisierung und fachliche Validierung.
  7. Gib Correlation-ID und sichere Fehlerdetails zurück, aber keine internen Geheimnisse.
Kontrolle

Fragen zum Verständnis

  1. Welche Bestandteile besitzen HTTP-Request und HTTP-Response?
  2. Warum sind ein Beispiel-JSON und ein Schema nicht dasselbe?
  3. Was unterscheidet eine idempotente Operation von einer sicheren Operation?
  4. Welche Statuscodes passen zu „erstellt“, „asynchron angenommen“, „nicht berechtigt“, „Konflikt“ und „zu viele Anfragen“?
  5. Welche Informationen müssen im Vertrag einer Bestands- oder DICOM-API fachlich präzisiert werden?
  6. Warum soll das API-Gateway keine medizinische oder kaufmännische Fachentscheidung treffen?
Merksatz
Ein guter API-Vertrag macht Erfolg und Fehler gleichermassen vorhersehbar. Er bewahrt fachliche Bedeutung, auch wenn Client und Service unabhängig weiterentwickelt werden.