Zurück zum Katalog
Season 8 19 Episoden 1h 18m 2026

OpenAPI and Swagger Ecosystem

Ausgabe 2026. Ein umfassender Leitfaden für 2026 zur Beherrschung der OpenAPI specification v3.1 und der Open-Source Swagger toolchain. Lerne, deine REST APIs mit dem definitiven Design-First-Ansatz zu entwerfen, zu dokumentieren und zu automatisieren.

API-Design Datenvalidierung
OpenAPI and Swagger Ecosystem
Aktuelle Wiedergabe
Click play to start
0:00
0:00
1
Der API-Vertrag
Eine Einführung in die OpenAPI Specification und die Swagger toolchain. Erfahre, warum APIs ein standardisiertes Beschreibungsformat benötigen und wie dies die Design-First-Entwicklung ermöglicht.
4m 07s
2
Das Swagger-Ökosystem
Ein grober Überblick über die Open-Source-Tools, die rund um die OpenAPI Specification entwickelt wurden. Wir untersuchen die Rollen von Swagger Editor, Swagger UI und Swagger Codegen.
4m 09s
3
Anatomie eines OpenAPI-Dokuments
Die strukturelle Grundlage eines OpenAPI 3.1-Dokuments verstehen. Wir behandeln unterstützte Formate, Versionierung und strukturelle Interoperabilität.
3m 37s
4
Die Bühne bereiten: Info und Servers
Metadaten und Umgebungen für deine API definieren. Wir untersuchen das Info Object und das Server Object, um API-Konsumenten den wesentlichen Kontext zu liefern.
3m 57s
5
API-Pfade und Operationen abbilden
Den Bauplan deiner API erstellen. Lerne, wie man Routen mit dem Paths Object definiert und HTTP-Methoden mit dem Operation Object spezifiziert.
4m 05s
6
Dynamische Endpunkte mit Parametern
Deine Endpunkte mithilfe von Path Templating und dem Parameter Object dynamisch gestalten. Wir behandeln Path-, Query-, Header- und Cookie-Parameter.
4m 44s
7
Eingaben strukturieren: Request Bodies
Umgang mit komplexen Daten-Payloads. Tauche in das Request Body Object ein und lerne, wie man Content Negotiation durch Media Types verwaltet.
3m 41s
8
Erwartungen und Fehler: Responses
Die Ergebnisse eines API-Aufrufs mit dem Responses Object definieren. Wir untersuchen die Zuordnung von HTTP-Statuscodes zu spezifischen Antwortstrukturen und den Fallback auf die Standardantwort.
4m 01s
9
Wiederverwendbarkeit mit Components
Deine Spezifikation DRY (Don't Repeat Yourself) halten. Entdecke, wie du das Components Object und Reference Objects ($ref) nutzt, um Definitionen in deinem gesamten Dokument zu teilen.
4m 18s
10
Datentypen und Schemas
Datenregeln mit dem Schema Object durchsetzen. Wir behandeln die Integration von OpenAPI mit JSON Schema Draft 2020-12, Datenformate und primitive Typen.
4m 38s
11
Security Schemes definieren
Die Vordertür deiner API verschließen. Lerne, wie man das Security Scheme Object für API-Schlüssel, HTTP-Authentifizierung (Basic/Bearer) und OAuth2 konfiguriert.
4m 22s
12
Security Requirements anwenden
Deine Operationen absichern. Wir untersuchen das Security Requirement Object und wie man Authentifizierungsregeln global oder pro Route anwendet.
3m 46s
13
Asynchrone APIs mit Webhooks
Umgang mit Out-of-Band-Anfragen. Tauche in das in OpenAPI 3.1 eingeführte Webhooks-Feature ein und verstehe, wie es sich von traditionellen Callbacks unterscheidet.
4m 14s
14
Zustandsübergänge mit Links
API-Workflows dynamisch abbilden. Wir untersuchen das Link Object, um Beziehungen zwischen Operationen zu beschreiben und einen pragmatischen Ansatz für HATEOAS zu bieten.
4m 59s
15
Interaktive Dokumentation mit Swagger UI
Deine Spezifikation zum Leben erwecken. Entdecke, wie du Swagger UI installierst und bereitstellst, um Entwicklern ein interaktives, visuelles Dokumentationsportal zu bieten.
3m 53s
16
Swagger UI anpassen
Die Developer Experience maßschneidern. Wir befassen uns mit der Konfiguration von Swagger UI, der Anpassung von Anzeigeoptionen und der Aktivierung von Funktionen wie Deep Linking und Syntax Highlighting.
3m 58s
17
Designen mit Swagger Editor
API-Definitionen mit sofortigem Feedback schreiben. Erkunde die Funktionen, die Installation und die Echtzeit-Validierungsfunktionen des klassischen Swagger Editor.
3m 24s
18
Automatisieren mit Swagger Codegen
Spezifikationen in Boilerplate-Code verwandeln. Lerne, wie Swagger Codegen v3 dein OpenAPI-Dokument nutzt, um sofort Server-Stubs und Client-Bibliotheken zu generieren.
4m 14s
19
Die Zukunft: Swagger Editor Next
Die Evolution des API-Designs annehmen. Wir stellen Swagger Editor Next, seine Architektur und seine leistungsstarke Unterstützung für OpenAPI 3.1 und die AsyncAPI-Spezifikation vor.
3m 57s

Episoden

1

Der API-Vertrag

4m 07s

Eine Einführung in die OpenAPI Specification und die Swagger toolchain. Erfahre, warum APIs ein standardisiertes Beschreibungsformat benötigen und wie dies die Design-First-Entwicklung ermöglicht.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 1 von 19. APIs sind der Motor des modernen Webs, aber wie kommunizieren sie eigentlich miteinander, ohne endloses Trial and Error? Bevor du auch nur eine einzige Zeile Code schreibst, brauchst du einen zuverlässigen Weg, um genau zu wissen, was ein Server erwartet und was er zurückschickt. Dieser Mechanismus ist der API Contract, der durch die OpenAPI Specification geregelt wird. Die OpenAPI Specification ist ein standardisiertes, sprachunabhängiges Interface für REST APIs. Stell sie dir wie einen Architektur-Blueprint vor. Wenn er richtig definiert ist, können sowohl Menschen als auch Maschinen auf diesen Blueprint schauen und genau verstehen, was ein Service macht. Sie brauchen keinen Zugriff auf den Source Code, sie müssen keine separate PDF-Dokumentation lesen und sie müssen auch keinen Live-Network-Traffic untersuchen. Die Specification beschreibt ganz klar die verfügbaren Endpoints, die genauen Inputs, die sie erfordern, und die exakten Strukturen der Daten, die sie zurückgeben. Sie ist in Plain Text geschrieben, entweder in YAML oder JSON, was sie für automatisierte Tools und menschliche Entwickler gleichermaßen universell lesbar macht. Wenn du mit APIs arbeitest, hast du wahrscheinlich schon mal den Begriff Swagger gehört. Oft werden Swagger und OpenAPI synonym verwendet, aber heute stehen sie für völlig unterschiedliche Konzepte. Ursprünglich hieß die Specification selbst Swagger. 2015 haben die Erfinder die Specification an die Linux Foundation übergeben, wo sie offiziell in OpenAPI Specification umbenannt wurde. Heute bezieht sich OpenAPI ausschließlich auf die Regeln und den Standard. Swagger bezieht sich auf das Ecosystem aus kommerziellen und Open-Source-Tools von SmartBear, die diese Regeln implementieren. Zum Beispiel generiert Swagger UI interaktive Dokumentation, und der Swagger Editor hilft dir dabei, die Files zu schreiben. Du schreibst ein OpenAPI-Dokument, aber du nutzt vielleicht Swagger-Tools, um es zu visualisieren. Das bringt uns zur wahren Stärke der Specification, nämlich der Design-First-Entwicklung. Ohne einen klaren Contract verläuft die API-Entwicklung normalerweise linear. Das Backend-Team schreibt den Code, stellt einen neuen Endpoint bereit und übergibt dann eine geschriebene Dokumentation. Währenddessen sitzt das Frontend-Team untätig herum und wartet darauf, dass das Backend fertig wird, damit es anfangen kann, das User Interface anzubinden. Hier ist die entscheidende Erkenntnis. Wenn du OpenAPI einsetzt, kehrst du diesen Prozess um. Bevor irgendjemand Application Code schreibt, einigen sich beide Teams auf das OpenAPI-Dokument. Dieses Text-File wird zu einem strikten Contract, der jegliches Rätselraten beseitigt. Das Backend-Team nutzt es, um Server Stubs zu generieren und zu validieren, dass seine Implementierung die vereinbarten Anforderungen erfüllt. Gleichzeitig nutzt das Frontend-Team exakt dasselbe Dokument, um Mock Server zu generieren. Es kann sofort anfangen, das User Interface zu bauen, und Network Requests an ein simuliertes Backend senden, das sich exakt so verhält, wie es die finale API tun wird. Kein Team blockiert das andere. Weil dieser Contract maschinenlesbar ist, löst er auch dauerhaft das Problem von veralteter Dokumentation. Wenn sich eine API-Anforderung ändert, aktualisierst du zuerst das Specification-File. Dein Tooling generiert dann automatisch die Web-Dokumentation, die Mock Server und die Client Libraries neu. Die Dokumentation und der Code bleiben perfekt synchronisiert, weil sie sich eine Single Source of Truth teilen. Eine API Specification ist nicht nur ein Mechanismus, um schöne Webseiten zu generieren; sie ist ein grundlegendes Kommunikationsprotokoll für deine Engineering-Teams, das menschliche Annahmen in ausführbare Regeln verwandelt. Wenn dir die Show gefällt und du uns unterstützen möchtest, such auf Patreon nach DevStoriesEU. Danke fürs Einschalten. Bis zum nächsten Mal!
2

Das Swagger-Ökosystem

4m 09s

Ein grober Überblick über die Open-Source-Tools, die rund um die OpenAPI Specification entwickelt wurden. Wir untersuchen die Rollen von Swagger Editor, Swagger UI und Swagger Codegen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und das Swagger-Ökosystem, Folge 2 von 19. Dokumentation zu schreiben ist mühsam, aber was wäre, wenn dein Code die Docs schreiben würde und deine Docs den Code? Dieser bidirektionale Workflow ist das Kernversprechen des Open-Source-Swagger-Ökosystems. Ein weit verbreiteter Irrtum ist, dass du das gesamte Ökosystem auf einmal übernehmen musst. Das musst du nicht. Das Toolset ist komplett modular. Du kannst dir einzelne Komponenten je nach deinen spezifischen Workflow-Anforderungen heraussuchen, egal ob du nur bestehende Dokumentation renderst oder ein komplett neues Backend scaffoldest. Die wichtigsten Open-Source-Tools arbeiten wie eine Pipeline. Du designst die API im Swagger Editor, visualisierst sie in Swagger UI und automatisierst Implementierungen mit Swagger Codegen. Im Swagger Editor beginnt das API-Design. Es ist eine browserbasierte Umgebung, in der du deine OpenAPI-Specification in YAML oder JSON schreibst. Während du tippst, validiert der Editor kontinuierlich deine Syntax anhand der OpenAPI-Specification-Regeln. Wenn du ein Feld falsch platzierst oder einen ungültigen Data Type definierst, markiert der Editor den Fehler sofort. Er bietet eine Echtzeit-Split-Screen-Ansicht, die den Raw Text auf der einen Seite und eine visuelle Preview auf der anderen Seite anzeigt. Sobald der Contract valide ist, kannst du mit Swagger Codegen zur Automatisierung übergehen. Dieses Tool nimmt dein OpenAPI-Specification-File und übersetzt es in funktionierenden Source Code. Es unterstützt Dutzende von Sprachen und Frameworks. Du kannst Server Stubs generieren, die das Boilerplate Routing und die Controller für dein Backend bereitstellen. Alternativ kannst du Client SDKs generieren, die von Consumer Applications verwendet werden, um mit deiner API zu interagieren, ohne eigene HTTP Request Logic schreiben zu müssen. Dann gibt es noch Swagger UI. Dieses Tool parst deine Specification und rendert sie als interaktive, webbasierte Documentation Page. Es geht über statischen Text hinaus. Swagger UI generiert Input Fields und Execution Buttons direkt aus deinen API-Definitions. User können Parameter eingeben, Authentication Tokens anhängen, echte HTTP Requests an deine API Endpoints senden und die Responses direkt im Browser inspecten. Stell dir einen konkreten Workflow vor, der diese drei Tools kombiniert. Du startest im Swagger Editor und entwirfst die Specification für eine neue User Management API. Du definierst die Endpoints, die Request Payloads und die erwarteten Responses. Sobald der Contract komplett ist, übergibst du dieses File an Swagger Codegen und konfigurierst es so, dass es einen Node.js Server Stub ausgibt. Codegen generiert automatisch die Directory Structure, die Package Configuration und die Route Handler. Du musst nur noch die spezifische Business Logic und die Database Queries in diesen pre-wired Controllern schreiben. Währenddessen gibst du genau dasselbe OpenAPI-Specification-File an dein QA-Team weiter, bereitgestellt über Swagger UI. Die QA Engineers müssen weder dein YAML-File lesen noch deinen Node.js-Code anschauen. Sie öffnen die Swagger UI Web Page, sehen die erforderlichen Inputs und fangen sofort an, Test Payloads an deinen neuen Node.js-Server zu senden. Hier ist die wichtigste Erkenntnis. Das Open-Source-Swagger-Ökosystem verlagert die API-Entwicklung: Anstatt Backend Code zu schreiben und zu hoffen, dass die Documentation akkurat bleibt, definierst du zuerst einen strikten Contract, bei dem die User-facing Documentation und das Server Boilerplate aus exakt derselben Source of Truth generiert werden. Das war's für diese Folge. Danke fürs Zuhören und keep building!
3

Anatomie eines OpenAPI-Dokuments

3m 37s

Die strukturelle Grundlage eines OpenAPI 3.1-Dokuments verstehen. Wir behandeln unterstützte Formate, Versionierung und strukturelle Interoperabilität.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 3 von 19. Bevor du eine komplexe API entwerfen kannst, brauchst du eine leere Leinwand. Aber wenn du mit der falschen Grundstruktur startest, wird das später unbemerkt deine komplette Toolchain zerschießen. Das bringt uns zur Anatomie eines OpenAPI-Dokuments. Im Kern ist ein OpenAPI-Dokument strikt als JSON-Objekt definiert. Du kannst deine Datei im JSON-Format oder YAML-Format schreiben. Das Tooling unterstützt beides, und das zugrunde liegende Datenmodell bleibt exakt gleich. Weil es direkt auf ein Standard-JSON-Objekt gemappt wird, sind die Formatierungsregeln extrem strikt. Jeder Feldname ist komplett case-sensitive. Wenn die Specification einen lowercase Feldnamen vorschreibt und du ihn mit einem Großbuchstaben am Anfang schreibst, wird der Parser ihn ignorieren oder einen Error werfen. Wenn du dein Projekt organisierst, hast du die Wahl bei der Dokumentenstruktur. Du kannst alles in einer einzigen, monolithischen Datei definieren. Alternativ kannst du deine Definitions auf ein Multi-Document-Setup aufteilen. In einem Multi-Document-Setup dient ein Root-File als Entry Point und verlinkt über Reference Pointers auf externe Dateien. Egal, ob du eine oder fünfzig Dateien verwendest, der Parser resolved sie am Ende zu einem einzigen logischen JSON-Objekt im Memory. Nehmen wir ein konkretes Szenario. Du startest ein brandneues Projekt. Du erstellst eine leere Textdatei namens openapi dot yaml. Bevor du versuchst, irgendeine Logik zu designen, willst du eine validierte Baseline etablieren. Um einen Schema-Validator zu bestehen, muss deine leere Leinwand exakt zwei Root-Level-Felder enthalten. Das erste erforderliche Feld heißt openapi. Sein Wert ist ein String, der die exakte Version der OpenAPI Specification angibt, die du verwendest, zum Beispiel 3.1.0. Es passiert extrem oft, dass dieses Feld fälschlicherweise für die Version deiner eigenen API gehalten wird. Die beiden haben absolut nichts miteinander zu tun. Der openapi Version-String existiert strikt für die Tooling-Kompatibilität. Wenn ein Code Generator oder ein Documentation Viewer deine Datei öffnet, liest er dieses Feld zuerst, um zu bestimmen, welche Parsing-Regeln angewendet werden sollen. Wenn du hier 3.0.0 angibst, aber Features aus 3.1.0 verwendest, werden deine Validation-Tools fehlschlagen, weil sie dein Dokument gegen das falsche Rule-Set evaluieren. Hier ist die wichtigste Erkenntnis. In das zweite erforderliche Root-Feld kommen deine eigentlichen API-Details. Dieses Feld ist das info Object. Das info Object liefert die Metadaten für deine Anwendung. Wir werden hier nicht im Detail auf den internen Inhalt eingehen, außer zu sagen, dass es einen Title und einen eigenen Version-String benötigt. Dieser interne Version-String innerhalb des info Objects ist der Ort, an dem du definierst, ob deine Anwendung bei Version eins oder Version zwei ist. Sobald deine openapi dot yaml Datei nur diese beiden Root-Felder enthält, openapi und info, hast du ein strukturell komplettes OpenAPI-Dokument. Du kannst diese Datei genau jetzt durch einen Validator laufen lassen, und sie wird fehlerfrei durchgehen. Diese minimale, valide Struktur zu etablieren, stellt sicher, dass dein Parser und deine Toolchain perfekt funktionieren, bevor du die Komplexität von echter Routing-Logik einführst. Danke fürs Zuhören, happy coding zusammen!
4

Die Bühne bereiten: Info und Servers

3m 57s

Metadaten und Umgebungen für deine API definieren. Wir untersuchen das Info Object und das Server Object, um API-Konsumenten den wesentlichen Kontext zu liefern.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 4 von 19. Wenn deine API ausfällt, woher weiß ein Consumer, an wen er sich wenden kann? Die Antwort steht ganz oben in deiner Spec. Wir sprechen über Info und Servers, die die Rahmenbedingungen festlegen. Bevor ein Entwickler überhaupt einen Request macht oder ein Datenmodell inspiziert, braucht er Kontext. Die Info- und Server-Objects liefern genau das. Stell sie dir wie das Deckblatt und das Adressbuch deiner API vor. Das Info-Object ist dein Metadaten-Hub. Zwei Fields sind hier zwingend erforderlich. Erstens der Title, also einfach der menschenlesbare Name deiner Application. Zweitens die Version. Leute verwechseln das oft mit der Version der OpenAPI-Spec. Die beiden sind aber komplett unabhängig voneinander. Die OpenAPI-Version sagt dem Parser, welchen Syntax-Regeln er folgen soll. Die Info-Version ist deine eigene API-Release-Nummer, so etwas wie 1.0.5. Sie sagt dem Consumer, welche Iteration des Produkts er gerade vor sich hat. Neben den Pflichtfeldern kannst du mit dem Info-Object noch weiteren Kontext hinzufügen. Du kannst eine Description einfügen, die CommonMark-Formatierung unterstützt. Dadurch kannst du detaillierte, gut lesbare Dokumentationen mit Absätzen und Links direkt in der Spec schreiben. Du kannst auch ein Contact-Object definieren, das einen Namen, eine URL und eine E-Mail-Adresse enthält. Wenn etwas kaputt geht oder ein Entwickler Access braucht, weiß er so genau, an wen er sich wenden muss. Zu guter Letzt kannst du mit dem License-Object die rechtlichen Bedingungen für die API festlegen. Dafür brauchst du einen Namen und optional eine URL, die auf den Lizenztext zeigt. Sobald das Info-Object geklärt hat, was die API ist, sagt das Servers-Array dem Consumer, wo sie liegt. Ohne das wissen die Consumer zwar, was deine API macht, aber nicht, wo sie zu finden ist. Du übergibst ein Array von Server-Objects, die die verschiedenen Environments repräsentieren, in denen deine API gehostet wird. Jedes Server-Object braucht nur ein einziges Field, nämlich die URL. Und hier ist der entscheidende Punkt. Du bist nicht auf eine einzige Base URL beschränkt. Du kannst mehrere Server-Einträge definieren, um deine tatsächliche Infrastruktur abzubilden. Dein erstes Server-Object könnte zum Beispiel deine Production-URL mit einer sicheren HTTPS-Adresse enthalten, zusammen mit einer Description, die sie explizit als Live-Production-Environment kennzeichnet. Dein zweites Server-Object könnte auf eine Staging- oder Sandbox-URL zeigen, mit dem Hinweis, dass sie ausschließlich für Tests gedacht ist. Wenn du deine Servers so strukturierst, werden interaktive Dokumentationstools und Client-Generatoren viel mächtiger. Anstatt einen Entwickler zu zwingen, die Base URL für jeden Request manuell zu konfigurieren, kann er einfach Staging oder Production in einem Dropdown-Menü in seinem Interface auswählen. Die Tools parsen dein Servers-Array und routen die Requests automatisch an den richtigen Host. Du kannst auch relative URLs verwenden, wenn dein OpenAPI-Dokument direkt auf dem Server gehostet wird, der die API bereitstellt. Das macht es einfacher, exakt dieselbe Spec-Datei über verschiedene Environments hinweg zu deployen, ohne ständig die Host-Adresse updaten zu müssen. Präzise Info- und Server-Objects zu definieren bedeutet, dass deine API nicht nur eine lose Sammlung von Operations ist, sondern ein vollständig identifizierter, rechtlich klarer und physisch lokalisierbarer Service. Die Qualität jeder automatisierten Integration hängt komplett von der Genauigkeit dieser Base URLs ab. Das war's für diese Folge. Danke fürs Zuhören und keep building!
5

API-Pfade und Operationen abbilden

4m 05s

Den Bauplan deiner API erstellen. Lerne, wie man Routen mit dem Paths Object definiert und HTTP-Methoden mit dem Operation Object spezifiziert.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 5 von 19. Jede REST API braucht Endpoints, aber wie beweist du einer Maschine mathematisch, welche HTTP-Methoden wo erlaubt sind? Du mappst sie logisch. Heute schauen wir uns das Mapping der API Paths und Operations an. Stell dir das Paths Object in OpenAPI wie den zentralen Router deiner Dokumentation vor. Es funktioniert wie ein Verzeichnis, das relative URLs auf bestimmte Funktionen mappt. Bevor wir uns anschauen, was da reinkommt, müssen wir ein häufiges Missverständnis klären. Paths müssen immer mit einem Forward Slash beginnen. Sie sind strikt relativ zu deiner Server URL, niemals absolut. Wenn deine API unter api dot example dot com gehostet wird, ist dein Path einfach slash users, nicht die komplette Domain. Die Specification verlässt sich auf genau diese Formatierung, um den Path korrekt an die Base Server Address anzuhängen. Innerhalb des Paths Objects definierst du einzelne Routen über String Keys. Der Value, der jedem Route Key zugewiesen wird, nennt sich Path Item Object. Ein Path Item Object ist im Grunde einfach nur ein Container. Es gruppiert alle HTTP-Methoden, die für diese spezifische URL erlaubt sind. Es gibt nicht direkt Inputs oder Outputs vor. Stattdessen enthält es Keys, die für Standard-HTTP-Methoden wie get, post, put oder delete stehen. Wenn du eine dieser HTTP-Methoden innerhalb eines Path Items mappst, ist der zugewiesene Value ein Operation Object. Im Operation Object wird die eigentliche Action definiert. Es beschreibt genau, was ein Client tun kann, wenn er diese spezifische Methode an genau diesen Path sendet. Um dir die Struktur besser vorstellen zu können, denk an einen Standard User Management Endpoint. In deinem Root Paths Object definierst du einen Key namens slash users. Der daran gehängte Value ist dein Path Item Object. Innerhalb dieses Containers definierst du einen get Key und einen post Key. Der get Key enthält ein Operation Object, das erklärt, wie die API eine Liste von Usern zurückgibt. Der post Key enthält ein komplett separates Operation Object, das beschreibt, wie ein neuer User erstellt wird. Beide Operations teilen sich die identische slash users URL, aber die Specification behandelt sie als unterschiedliche logische Actions, die unter ihren jeweiligen HTTP-Methoden-Keys verschachtelt sind. Innerhalb jedes Operation Objects definierst du typischerweise zwei Fields zur Identifizierung: die summary und die operationId. Die summary ist ein kurzer String, der für menschliche Leser gedacht ist. Für die get-Methode auf unserem slash users Path könnte die summary einfach "List all registered users" lauten. Sie taucht in generierten Dokumentations-Interfaces auf, damit Developer die verfügbaren Endpoints schnell überfliegen können. Hier ist der entscheidende Punkt. Das operationId Field ist für die Maschinen gedacht. Es ist ein eindeutiger String, der genutzt wird, um die Operation in deinem gesamten API-Dokument zu identifizieren. Code Generatoren verlassen sich stark auf die operationId, um die Funktionen und Methoden innerhalb der Client SDKs zu benennen, die sie bauen. Wenn du deiner get Operation eine operationId namens listUsers gibst, wird der generierte Python- oder TypeScript-Client eine Funktion haben, die genau listUsers heißt. Dieser String muss absolut unique sein. Wenn zwei Operations dieselbe operationId teilen, produzieren automatisierte Generation Tools kaputten Code oder stürzen komplett ab. Die Struktur verlässt sich auf striktes, vorhersehbares Nesting. Paths mappen auf Path Items, Path Items mappen auf HTTP-Methoden, und Methoden mappen auf Operation Objects, die durch unique Identifier definiert werden. Wenn du diese exakte Hierarchie beherrschst, garantierst du, dass sowohl menschliche Developer als auch nachgelagerte Automation Tools ohne Rätselraten mit deiner API-Architektur interagieren können. Das war's für diese Folge. Bis zum nächsten Mal!
6

Dynamische Endpunkte mit Parametern

4m 44s

Deine Endpunkte mithilfe von Path Templating und dem Parameter Object dynamisch gestalten. Wir behandeln Path-, Query-, Header- und Cookie-Parameter.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 6 von 19. Statische Endpoints bringen dich nur bis zu einem gewissen Punkt. Um eine wirklich nützliche API zu bauen, brauchst du eine Möglichkeit, dynamische Argumente direkt über den Request zu übergeben. So kannst du ändern, wie eine Operation ausgeführt wird oder auf welche Daten sie abzielt. In dieser Folge dreht sich alles um dynamische Endpoints mit Parametern. Fangen wir mit dem URL-Pfad selbst an. In OpenAPI definierst du dynamische Abschnitte einer URL mit Path Templating. Das machst du, indem du einen Variablennamen in geschweifte Klammern setzt. Denk an eine E-Commerce-API. Wenn du eine bestimmte Bestellung abrufen willst, sieht dein Pfad so aus: Slash orders Slash geschweifte Klammer auf orderId geschweifte Klammer zu. In deinem OpenAPI-Dokument beschreibst du diese Variable mit einem Parameter Object. Du gibst ihre Position an, indem du das in-Feld auf den Wert path setzt. Manchmal versuchen Leute, Path-Parameter optional zu machen. Das geht aber nicht. Ein Path-Parameter definiert die Route strukturell. Wenn der Parameter fehlt, existiert die Route schlichtweg nicht. Wegen dieser Regel muss bei jedem Parameter, dessen Position path ist, das required-Feld immer auf true gesetzt sein. Was ist, wenn du optionale Modifier willst? Das bringt uns zur zweiten Position, bei der das in-Feld den Wert query hat. Query-Parameter stehen ganz am Ende der URL, nach einem Fragezeichen. Um auf unsere E-Commerce-API zurückzukommen: Vielleicht willst du eine Liste von Bestellungen, aber nur die sehen, die schon unterwegs sind. Dafür hängst du Fragezeichen status gleich shipped an die URL an. Im Gegensatz zu Path-Parametern definieren Query-Parameter nicht den Ort der Ressource. Sie filtern oder modifizieren das Ergebnis. Das heißt, ihr required-Feld kann entweder auf true oder false gesetzt werden. Die URL ist nicht der einzige Ort, um Parameter zu übergeben. Das Parameter Object unterstützt zwei weitere Positionen. Wenn du das in-Feld auf header setzt, kannst du Custom HTTP-Header definieren, die von deiner Operation erwartet werden. Zum Beispiel könntest du einen Custom Header verlangen, der einen bestimmten Client-Gerätetyp angibt. Beachte, dass Standard-Header wie Accept oder Authorization strikt aus dem Parameter Object ausgeschlossen sind, da sie woanders in OpenAPI behandelt werden. Zu guter Letzt kannst du durch das Setzen der Position auf cookie Parameter dokumentieren, die über Browser-Cookies übergeben werden, wie zum Beispiel ein temporäres Session-Token. Zu deklarieren, wo ein Parameter lebt, ist nur der erste Schritt. Du musst auch seine Struktur definieren. Innerhalb des Parameter Objects nutzt du das schema-Feld, um den zugrundeliegenden Datentyp zu definieren. Das sagt dem API-Consumer ganz genau, ob diese orderId ein Integer, ein String oder ein bestimmtes Format wie eine UUID ist. Dann gibt es noch das style-Feld. Das gibt vor, wie der Parameter in den HTTP-Request serialisiert wird. Serialisierung ist extrem wichtig, wenn du komplexe Daten wie Arrays oder Objects übergibst. Wenn du eine Liste von Statuswerten in einem Query-String übergibst, bestimmt das style-Feld das Format. Ein style-Wert von form trennt mehrere Werte vielleicht mit einem Ampersand, während ein style-Wert von simple eine kommagetrennte Liste ausgibt. Indem du die Felder für Position, schema und style kombinierst, gibst du dem Client genaue Anweisungen, wie er den Network-Request formatieren soll. Hier ist die wichtigste Erkenntnis. Das Parameter Object beschreibt Inputs nicht nur aus reiner Höflichkeit. Es diktiert strikt den genauen Footprint dessen, was eine Operation akzeptiert, und erzwingt Datentypen und Formate, bevor auch nur eine einzige Zeile deiner Backend-Logik läuft. Wenn du diese Folgen hilfreich findest, kannst du die Show unterstützen, indem du auf Patreon nach DevStoriesEU suchst. Das war's für diese Folge. Danke fürs Zuhören und viel Spaß beim Entwickeln!
7

Eingaben strukturieren: Request Bodies

3m 41s

Umgang mit komplexen Daten-Payloads. Tauche in das Request Body Object ein und lerne, wie man Content Negotiation durch Media Types verwaltet.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 7 von 19. Wenn du Hunderte von Feldern an eine API sendest, stoßen Query Parameters an ihre Grenzen. Du brauchst ein strukturiertes Package. Dieses Package wird durch Structuring Input Request Bodies definiert. Während GET Requests auf dem URL Path und dem Query String basieren, übernehmen POST, PUT und PATCH Requests die Hauptarbeit, indem sie einen Payload übertragen. Dieser Payload enthält komplexe, verschachtelte Daten. In älteren Swagger 2.0 Specifications erinnerst du dich vielleicht daran, Body Parameters oder Form Parameters direkt neben Header und Path Inputs definiert zu haben. OpenAPI Version 3 hat das grundlegend geändert. Es hat Body Parameters komplett abgeschafft und ein einzelnes, dediziertes Request Body Object eingeführt. Das Request Body Object befindet sich auf dem Operation Level deines API-Designs. Sein wichtigstes Merkmal ist, dass es stark auf Content Negotiation setzt. Du beschreibst die Daten nicht nur, sondern mappst sie auf bestimmte Media Types. Dieses Mapping passiert innerhalb der Content Map. Die Content Map ist ein Dictionary, bei dem die Keys Standard-MIME-Types wie application slash json sind, und die Values sind Media Type Objects, die genau beschreiben, wie dieser spezifische Payload aussieht. Stell dir einen Client vor, der ein neues User Profile hochlädt. Das Profil enthält einen Namen, eine E-Mail-Adresse, User Preferences und ein verschachteltes Address Object. Anstatt das in URL Variables zu quetschen, sendet der Client einen JSON Payload. In deinem OpenAPI-Dokument erstellst du unter dem Request Body eine Content Map mit dem exakten Key application slash json. Das deklariert explizit, dass die API für diese Operation nur JSON akzeptiert. Wenn ein Client versucht, XML oder Plain Text zu senden, weiß der Server sofort, dass er den Request mit einem Unsupported Media Type Error ablehnen muss. Diese Struktur ist extrem flexibel. Wenn dein User Profile Upload neben den Textdaten auch ein Profilbild erfordert, verarbeitest du das an genau derselben Stelle. Du fügst der Content Map einen zweiten Key für multipart slash form-data hinzu. Dieses Media Type Object spezifiziert dann die Regeln für den gemischten Payload. Jeder Media Type bekommt seine eigene, unabhängige Definition. Das erlaubt es exakt demselben API Endpoint, grundlegend unterschiedliche Datenformate zu verarbeiten, und zwar komplett basierend auf dem Content-Type Header, den der Client im HTTP Request sendet. Im Request Body Object selbst findest du neben der Content Map ein Required Flag. Das ist eine einfache Boolean Property. Wenn du sie auf true setzt, schlägt der Request sofort fehl, falls der Client einen leeren Body sendet. Es erzwingt das Vorhandensein des Payloads, bevor der Server überhaupt versucht, die Daten darin zu validieren. Die eigentlichen strukturellen Regeln des Payloads selbst werden durch ein Schema gehandhabt, das an das Media Type Object angehängt ist, obwohl die tieferen Mechaniken des JSON Schema Designs in Folge 10 behandelt werden. Hier ist die wichtigste Erkenntnis. Das Request Body Object entkoppelt den rohen Data Payload von den HTTP Transport Parameters. Das erlaubt es einem einzelnen Endpoint, völlig unterschiedliche Validation Rules anzuwenden, die ausschließlich auf dem Media Type basieren, der in der Content Map deklariert ist. Das war’s für diese Folge. Danke fürs Zuhören, und keep building!
8

Erwartungen und Fehler: Responses

4m 01s

Die Ergebnisse eines API-Aufrufs mit dem Responses Object definieren. Wir untersuchen die Zuordnung von HTTP-Statuscodes zu spezifischen Antwortstrukturen und den Fallback auf die Standardantwort.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 8 von 19. Die meisten Entwickler dokumentieren den Happy Path, aber wahre API-Resilienz entsteht dadurch, dass man strikt definiert, wie genau Dinge fehlschlagen werden. Wenn du Clients nur sagst, was passiert, wenn alles perfekt läuft, ist deine API nur halb dokumentiert. Heute schauen wir uns Expectations und Error Responses an. In OpenAPI dienen Responses als ultimative Contract-Garantie. Sie formalisieren das Versprechen, dass die API bei einem bestimmten Request des Clients einen bekannten Payload oder einen strukturierten Error zurückgibt. Dieses Versprechen wird vom Responses Object gehandhabt. Stell es dir wie eine Routing-Tabelle für Ergebnisse vor. Die Keys in dieser Map sind HTTP-Statuscodes, die als Strings geschrieben werden, wie zum Beispiel der Text 200 oder 404. Die Values, die an diese Keys angehängt sind, sind einzelne Response Objects. Sie beschreiben detailliert, was genau übers Netzwerk an den Client zurückkommt. Hier ist die wichtigste Erkenntnis zur Formatierung dieser Objects. In weiten Teilen von OpenAPI sind Description-Felder komplett optional. Du verwendest sie, wenn du anderen Entwicklern hilfreichen Kontext geben willst. In einem Response Object ist das Description-Feld jedoch zwingend erforderlich. Wenn du es weglässt, wird deine komplette API-Definition ungültig. Es muss kein langer Absatz sein. Eine kurze, treffende Formulierung, die das Ergebnis erklärt, reicht aus, aber der Parser erzwingt, dass sie vorhanden ist. Stell dir ein praktisches Szenario vor, in dem ein Client ein bestimmtes User-Profil anfragt. Für das erfolgreiche Ergebnis definierst du einen Key für den String 200. Innerhalb dieses Response Objects gibst du deine obligatorische Description an, zum Beispiel Successful user retrieval. Als Nächstes definierst du das Content-Feld. Dieses Feld mappt einen Media Type, meistens application/json, direkt auf das Schema, das die Struktur deines User Objects definiert. Der Client-Code weiß nun genau, welche Properties er erwarten kann, wenn der Call erfolgreich ist. Damit ist das erwartete Ergebnis abgedeckt. Jetzt musst du den Fehlerfall dokumentieren. Unter demselben Responses Object definierst du einen weiteren Key für 404. Die erforderliche Description könnte einfach User not found lauten. Genau wie im Erfolgsfall mappt das Content-Feld hier application/json auf ein Schema, aber dieses Mal zeigt es auf deine standardisierte Error-Struktur. Dank dieses expliziten Contracts kann die Client-Application die Error Response sicher parsen und dem End-User einen hilfreichen Prompt anzeigen, anstatt bei unerwarteten Daten abzustürzen. Es wird immer Fälle geben, in denen du nicht jeden einzelnen Error Code vorhersagen kannst, den deine Architektur produzieren könnte. Ein Reverse Proxy könnte ein 502 Bad Gateway werfen, oder eine Web Application Firewall könnte ein 403 Forbidden injecten. Hier kommt die Default Wildcard ins Spiel. Anstelle eines numerischen HTTP-Statuscodes verwendest du genau das Wort default als Key. Das fungiert als Catch-All-Definition. Wenn der Server einen Statuscode zurückgibt, den du nicht explizit im Responses Object aufgelistet hast, greift der Client auf die Struktur zurück, die unter default definiert ist. Es dient als Sicherheitsnetz für generisches Error Handling und stellt sicher, dass der Client immer noch weiß, wie er den Error Payload lesen muss. Eine wirklich robuste API-Definition erklärt nicht nur das perfekte Szenario; sie liefert eine präzise, vorhersehbare Map für jeden möglichen Weg, wie das System fehlschlagen kann. Danke, dass du dir ein paar Minuten für mich Zeit genommen hast. Bis zum nächsten Mal, mach's gut.
9

Wiederverwendbarkeit mit Components

4m 18s

Deine Spezifikation DRY (Don't Repeat Yourself) halten. Entdecke, wie du das Components Object und Reference Objects ($ref) nutzt, um Definitionen in deinem gesamten Dokument zu teilen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 9 von 19. Wenn deine API 100 Endpoints hat und alle die exakt gleiche Pagination-Struktur zurückgeben, ist Copy-Pasting ein sicheres Rezept für Chaos. Eine kleine Änderung an einem Field Name bedeutet, dass du 100 verstreute Definitions in deinem Dokument manuell zusammensuchen musst. Der strukturelle Mechanismus, der dieses Problem löst, ist Reusability mit Components. Die OpenAPI-Specification begegnet dem Spec Bloat mit einem dedizierten Root-Level-Abschnitt namens Components Object. Stell es dir wie ein zentrales Dictionary oder eine interne Library für deine API-Definition vor. Anstatt komplexe Datenstrukturen, Standard-Query-Parameter oder sich wiederholende Server Responses inline unter jedem einzelnen Path zu definieren, deklarierst du sie genau einmal im Components Object. Das etabliert eine strikte Single Source of Truth. Bevor ich die Mechanik erkläre, muss ich ein häufiges Missverständnis darüber ausräumen, wie sich dieser Abschnitt verhält. Ein Schema, einen Header oder einen Parameter innerhalb des Components Object zu definieren, macht es nicht automatisch in deiner API-Dokumentation oder deiner Routing-Logik verfügbar. Die Components-Sektion ist komplett passiv. Sie hat keinen direkten Effekt auf deine Endpoints. Eine Component ist nur dann relevant, wenn ein tatsächlicher Path oder eine Operation explizit darauf verweist. Um eine Component zu aktivieren, nutzt du das Reference Object. In der OpenAPI-Syntax wird das durch das Keyword dollar-sign-ref dargestellt. Das Reference Object verwendet einen JSON Pointer, um dem Tooling genau zu sagen, wo sich die geteilte Definition befindet. Ein standardmäßiger interner Pointer String beginnt mit einem Hash-Symbol, gefolgt von einem Slash, dem Wort components, einem weiteren Slash, dem spezifischen Kategorienamen und schließlich dem Custom Name, den du deinem Object gegeben hast. Lass uns das an einem konkreten Szenario festmachen. Fast jede API braucht einen konsistenten Weg, um Client- und Server-Errors zurückzugeben. Du willst, dass deine 400 Bad Request und 500 Internal Server Error Responses über alle Endpoints hinweg exakt dieselbe Struktur teilen, die vielleicht einen Integer Error Code und einen beschreibenden Message String enthält. Zuerst navigierst du runter zu deinem Root Components Object. Darin öffnest du eine Kategorie namens schemas. Unter schemas definierst du ein neues generisches Object namens ErrorModel und spezifizierst deine code und message Properties. Deine generische Error-Struktur ist jetzt sicher gespeichert. Als Nächstes gehst du hoch zu deinen API Paths. Wenn du die 400-Level-Response für einen User Creation Endpoint definierst, überspringst du das Inline-Schreiben der Schema Properties komplett. Stattdessen gibst du einen dollar-sign-ref Key an. Sein Value ist der exakte Path zu deinem gespeicherten Schema: hash-slash-components-slash-schemas-slash-ErrorModel. Du fügst exakt denselben Reference String in die 500-Level-Response ein. Du wiederholst diese Reference über deine Billing Endpoints, deine Authentication Endpoints und deine Search Endpoints hinweg. Dutzende von Operations zeigen nun zurück auf eine einzige Definition. Diese Organisationsstrategie geht weit über schemas hinaus. Das Components Object bietet spezifische Kategorien für verschiedene API-Elemente. Du kannst Standard-Pagination-Arguments in der parameters-Kategorie speichern. Du kannst ganze Payload-Strukturen in requestBodies oder Standard-Authorization-Requirements in securitySchemes definieren. Die operative Logik bleibt bei allen identisch. Definiere das Object einmal in seinem entsprechenden Bucket und verkable es dann über eine Reference in deine operativen Paths. Hier ist der entscheidende Punkt. Beim Aufbau einer wartbaren API-Specification geht es fundamental darum, Duplication zu kontrollieren. Wenn ein neues Requirement auftaucht, das dich zwingt, ein Timestamp Field zu jeder Error Response hinzuzufügen, bedeutet die Nutzung von Components, dass du das ErrorModel an genau einer Stelle bearbeitest und jede Operation in deiner gesamten API das Update automatisch erbt. Das war's für diese Folge. Bis zum nächsten Mal!
10

Datentypen und Schemas

4m 38s

Datenregeln mit dem Schema Object durchsetzen. Wir behandeln die Integration von OpenAPI mit JSON Schema Draft 2020-12, Datenformate und primitive Typen.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 10 von 19. Du weißt, was ein Integer ist, aber deine Datenbank muss wissen, ob es ein 32-Bit- oder 64-Bit-Wert ist. Schemas schließen diese Lücke. In dieser Folge geht es komplett um Datentypen und Schemas. Das Schema Object fungiert als strenge Validation Engine für deine API. Es sitzt direkt unter deinen Parametern, Request Bodies und Responses. Anstatt einem Client einfach nur zu sagen, dass er einen generischen JSON Payload senden soll, diktiert ein Schema die genaue Struktur, den Type und die Grenzen dieser Daten. Es fungiert als strenger Filter an der Grenze deines Systems. Wenn ein eingehender Request nicht den im Schema definierten Regeln entspricht, schlägt die Validation fehl, bevor deine Application Logic ihn überhaupt sieht. Früher stießen Entwickler bei der Definition dieser Regeln auf ein großes Problem. OpenAPI Version 3.0 verwendete einen eigenen, angepassten Custom Dialect von JSON Schema. Es war nah am Standard, aber in ein paar frustrierenden Punkten grundlegend inkompatibel und verursachte endlose Kopfschmerzen beim Tooling. OpenAPI Version 3.1 löst das komplett. Es ist kein Custom Dialect mehr. OpenAPI 3.1 ist jetzt komplett auf modernes JSON Schema abgestimmt. Genauer gesagt fungiert es als Superset von JSON Schema Draft 2020-12. Das bedeutet, dass jedes Standard-JSON-Schema-Dokument, das du bereits hast, automatisch ein valides OpenAPI 3.1 Schema ist. Ein Superset zu sein bedeutet einfach nur, dass OpenAPI ein paar API-spezifische Keywords hinzufügt, wie XML Configuration Identifiers, ohne den zugrunde liegenden Standard kaputt zu machen. Im Kern dieser Schema-Regeln steht das Keyword type. OpenAPI verlässt sich auf die primitiven Datentypen, die von JSON Schema definiert werden. Du hast Strings, Integers, Numbers und Booleans. Die Unterscheidung zwischen Number und Integer wird strikt durchgesetzt. Der Type number verarbeitet Floating-Point-Werte und Doubles, während der Type integer spezifisch alles mit einem Dezimalbruch ablehnt. Hier ist die entscheidende Erkenntnis. Zu wissen, dass etwas einfach nur ein String oder ein Integer ist, bietet selten genug Kontext für ein Backend-System. Hier wird der Format Modifier essenziell. Das Keyword format grenzt einen breiten primitiven Type auf etwas Spezifisches ein, für das dein Code Speicher reservieren oder wogegen er validieren kann. Der primitive Type sagt dem JSON Parser, wie er die Rohdaten lesen soll, und das Format sagt deiner Application genau, wie sie den Wert interpretieren soll. Wenn du zum Beispiel eine Property als Integer definierst, kannst du ein Format von int32 oder int64 hinzufügen, um die genaue Byte-Größe anzugeben. Wenn dein Type ein String ist, kannst du ein Format wie date-time, password oder email anwenden. Die OpenAPI Specification definiert eine Standard Registry dieser Formate, aber das Feld ist letztendlich ein offener String, was bedeutet, dass das Tooling Custom Formats unterstützen kann, wenn deine Application sie benötigt. Lass uns ein konkretes Szenario durchgehen. Du musst ein User Object für einen Registration Endpoint definieren. Du fängst an, indem du ein Schema vom Type object erstellst. Innerhalb dieses Objects definierst du zwei Properties, eine ID und eine E-Mail-Adresse. Für die ID Property setzt du den Type auf integer und das Format auf int64. Für die E-Mail-Adressen-Property setzt du den Type auf string und das Format auf email. Zum Schluss gibst du ein Array von required Properties an, das die Namen der beiden Felder ID und E-Mail enthält. Du hast jetzt einen strikten, ausführbaren Contract. Wenn ein Client eine E-Mail-Property sendet, die keiner validen E-Mail-Adresse ähnelt, oder eine ID, die ein numerisches 64-Bit-Limit überschreitet, weist das API Gateway oder Framework den Payload sofort zurück. Präzision an der API Boundary erspart dir das Schreiben endloser Data-Checking-Logic in deinen Controllern. Das war's für diese Folge. Danke fürs Zuhören und keep building!
11

Security Schemes definieren

4m 22s

Die Vordertür deiner API verschließen. Lerne, wie man das Security Scheme Object für API-Schlüssel, HTTP-Authentifizierung (Basic/Bearer) und OAuth2 konfiguriert.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 11 von 19. Bevor du einen sensiblen Endpoint schützen kannst, musst du formal festlegen, wie genau ein gültiger Ausweis aussieht. Du kannst nicht einfach eine Authentifizierung von einem Client verlangen. Du musst den genauen Mechanismus spezifizieren, den sie nutzen sollen, die URLs, die sie aufrufen müssen, und die Parameter, die sie senden müssen. Das Definieren von Security Schemes ist die Lösung dafür. Stell dir diesen Schritt so vor, als würdest du die Schlösser in deinem System inventarisieren. Du beschreibst die verfügbaren Schlosstypen, aber du installierst sie noch nicht an bestimmten Türen. In OpenAPI definierst du diese Schlösser innerhalb des components object, genauer gesagt in einer Section namens security schemes. Jedes Schloss bekommt einen Custom Reference Name deiner Wahl. Innerhalb dieses Namens deklarierst du seinen type und seine benötigten properties. Es gibt fünf primäre Arten von Security Schemes in der OpenAPI 3 Punkt 1 Spezifikation. Der erste ist der http type. Das deckt Standard HTTP Authentifizierungsmechanismen ab, die durch RFC 7235 definiert sind, wie Basic oder Bearer Authentication. Um ein Standard HTTP Bearer Token Scheme zu definieren, erstellst du einen Eintrag unter security schemes. Du setzt die type property auf den string http, und du setzt die scheme property auf den string bearer. Du kannst optional auch eine bearer format property hinzufügen, um einen Hinweis auf den Token-Typ zu geben, zum Beispiel indem du den string JWT übergibst. Hier ist die wichtigste Erkenntnis. Wenn du das http bearer scheme verwendest, geht die Spezifikation implizit davon aus, dass das Token im Standard HTTP Authorization Header gesendet wird. Du sagst OpenAPI nicht, wo es suchen soll. Aber der zweite Typ, das api key scheme, ist völlig anders. Für einen API Key musst du explizit sowohl die name property angeben, also den genauen Feldnamen, als auch die in property, die vorgibt, wo der Key hinkommt. Die in property akzeptiert nur drei Werte: query, header oder cookie. Wenn du einen Custom Header wie X API Key erwartest, nutze den api key type. Wenn du Standard Authorization Header verwendest, nutze den http type. Der dritte Typ ist oauth2. Dieser erfordert mehr strukturelle Konfiguration, weil OAuth2 mehrere verschiedene flows hat. Um einen komplexen OAuth2 authorization code flow zu definieren, setzt du zuerst den type auf oauth2. Dann stellst du ein flows object bereit. Innerhalb von flows fügst du ein authorization code object hinzu. Dieses verschachtelte Objekt benötigt zwei spezifische URLs. Du gibst die authorization url an, wo der User sich einloggt, und die token url, wo die Applikation einen Code gegen ein Token eintauscht. Du musst auch ein scopes object bereitstellen, das spezifische scope Namen auf kurze Textbeschreibungen mappt, die erklären, was diese scopes erlauben. Der vierte Typ ist open id connect. Das ist viel einfacher zu deklarieren als OAuth2. Du setzt den type auf open id connect und gibst eine einzige open id connect url property an. Diese zeigt direkt auf das well-known discovery document, das Clients nutzen, um sich automatisch zu konfigurieren. Schließlich ist der fünfte Typ mutual t l s, was für mutual Transport Layer Security steht. Du setzt den type einfach auf mutual t l s. Das signalisiert, dass der Client während des initialen TLS-Handshakes ein X 509 Zertifikat zur Authentifizierung bereitstellen muss, komplett außerhalb der HTTP Application Layer. Das absolut Wichtigste, was du hier mitnehmen solltest, ist, dass das Definieren von security schemes den Mechanismus der Authentifizierung von den Endpoints trennt, die ihn benötigen. Du baust deine Schlösser einmal in einem zentralisierten Katalog und stellst sicher, dass Clients genau wissen, wie sie ihre Credentials formatieren müssen, bevor sie überhaupt versuchen anzuklopfen. Übrigens, wenn du die Show unterstützen möchtest, kannst du auf Patreon nach DevStoriesEU suchen. Das war's für diese Folge. Danke fürs Zuhören und keep building!
12

Security Requirements anwenden

3m 46s

Deine Operationen absichern. Wir untersuchen das Security Requirement Object und wie man Authentifizierungsregeln global oder pro Route anwendet.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 12 von 19. Security zu implementieren ist ein Balanceakt: Du willst den gesamten Tresor global absichern, aber die Lobby für Besucher offen lassen. Um das zu erreichen, ohne dich selbst auszusperren, musst du verstehen, wie OpenAPI Security Requirements anwendet. Sobald du deine Security Schemes in der Components-Section deines OpenAPI-Dokuments definiert hast, musst du sie deinen Endpoints zuweisen. Das machst du über das Security Array. Dieses Array enthält Security Requirement Objects, die auf die Namen der Schemes verweisen, die du vorher gebaut hast. Du kannst dieses Security Array an zwei Stellen deklarieren: global im Root deines OpenAPI-Dokuments oder lokal innerhalb eines bestimmten Operation Objects. Wenn du es im Root definierst, erbt jeder einzelne Endpoint in deiner API dieses Requirement. Wenn du es innerhalb einer Operation definierst, überschreibt es die globale Konfiguration komplett. Es wird nicht mit den globalen Settings gemerged, es ersetzt sie komplett. Stell dir ein Szenario vor, in dem du ein globales Requirement festlegst, dass jede API-Route ein Bearer Token braucht. Das sichert den Tresor. Aber du hast auch eine Login-Route. Wenn die Login-Route dieses globale Token-Requirement erbt, können sich neue User nie authentifizieren, weil sie noch gar kein Token haben. Du musst diese globale Sperre überschreiben. Ein häufiger Fehler ist, das Security-Feld bei der Login-Operation einfach wegzulassen, in der Annahme, dass das "keine Security" bedeutet. Wenn du das Feld weglässt, fällt die Operation einfach auf das globale Requirement zurück, und deine User sind ausgesperrt. Um anonymen Zugriff explizit zu erlauben, musst du das Security Array in der Login-Operation definieren und ein leeres Object reinpacken. Dieses leere Object sagt OpenAPI, dass es für den Zugriff auf diesen spezifischen Endpoint überhaupt kein Requirement gibt. Die globale Sperre wird umgangen, und Besucher können in die Lobby. Hier wird es interessant. Wie du die Items im Security Array strukturierst, bestimmt die Logik deiner Authentifizierung. Es verarbeitet sowohl logische OR- als auch logische AND-Szenarien, und zwar rein basierend auf Object-Grenzen. Wenn dein Array zwei separate Security Requirement Objects enthält, zum Beispiel ein Object, das nach einem API Key verlangt, und ein zweites, separates Object, das nach OAuth2 verlangt, erzeugt das ein logisches OR. Die API akzeptiert einen Request, wenn der Client entweder das erste Object oder das zweite Object erfüllt. Wenn du ein logisches AND brauchst, änderst du die Grenzen. Sagen wir mal, ein Request braucht sowohl ein OAuth2-Token als auch eine Custom Header Signature. Du packst beide Scheme-Namen in ein einziges Security Requirement Object. Weil sie sich dasselbe Object teilen, verlangt die API, dass alle gültig sind, bevor sie den Request durchlässt. Wenn du diese Objects schreibst, mappst du den Namen deines Schemes auf ein Array. Wenn du OAuth2 oder OpenID Connect nutzt, listet dieses Array die spezifischen Scopes auf, die für die Operation erforderlich sind, wie das Lesen oder Schreiben von Daten. Wenn du einen API Key oder ein Basic HTTP Scheme verwendest, gelten Scopes nicht. Du musst also den Scheme-Namen auf ein leeres Array mappen, um die Specification zu erfüllen. Die physische Struktur deines Security Arrays ist dein wichtigstes Tool, um die Zugriffslogik zu definieren. Meistere den Unterschied bei den Grenzen, ob du Items im Array auflistest oder innerhalb eines einzelnen Objects, und du kannst jeden Authentication Flow bauen, den dein System braucht. Das war's für diese Folge. Danke fürs Zuhören, und viel Erfolg beim Entwickeln!
13

Asynchrone APIs mit Webhooks

4m 14s

Umgang mit Out-of-Band-Anfragen. Tauche in das in OpenAPI 3.1 eingeführte Webhooks-Feature ein und verstehe, wie es sich von traditionellen Callbacks unterscheidet.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 13 von 19. REST ist super für Abfragen, aber was passiert, wenn deine API die Kommunikation starten muss? Asynchrone APIs mit Webhooks lösen das, indem sie Daten pushen, sobald ein Event passiert. Das macht ständiges Polling komplett überflüssig. Früher mussten Consumer Skripte schreiben, die deine Endpoints immer wieder gecheckt haben, um zu sehen, ob sich ein Status geändert hat. Das war ineffizient, sowohl für ihre Server als auch für deine. OpenAPI 3.1 hat diese Einschränkung gelöst, indem das webhooks-Feld direkt im Root des OpenAPI-Dokuments eingeführt wurde. Diese Ergänzung brachte First-Class-Support für event-driven, asynchrone Kommunikation in die Standard-API-Spezifikationen. Anstatt nur zu dokumentieren, was ein Client an deinen Server sendet, erlaubt dir das webhooks-Feld, genau das Gegenteil zu dokumentieren. Du definierst die HTTP Requests, die deine Plattform initiiert und an den Server des Consumers sendet. Es ist wichtig, eine klare Linie zwischen Webhooks und Callbacks zu ziehen, da die OpenAPI-Spezifikation sie sehr unterschiedlich behandelt. Der Unterschied liegt darin, wie die Destination-URL registriert wird. Callbacks werden durch einen spezifischen, aktiven API Request ausgelöst. Ein Client ruft einen Subscription Endpoint deiner API auf und übergibt eine Target-URL direkt dort im Request Payload. Weil sie an eine Operation gebunden sind, werden Callbacks innerhalb dieses spezifischen Operation Objects definiert. Webhooks werden out-of-band registriert. Ein Entwickler loggt sich in ein Management Dashboard ein, navigiert zu einer Settings-Seite und fügt seine Destination-URL in ein Formular ein. Der API-Spezifikation ist es egal, wie die URL beschafft wurde. Weil Webhooks unabhängig von einem spezifischen Runtime API Call existieren, werden sie auf der höchsten Ebene deines OpenAPI-Dokuments platziert, direkt neben deinen Standard-Paths und Components. Um einen Webhook zu dokumentieren, öffnest du die Root-Level webhooks Map. Jeder Key in dieser Map ist ein einfacher String, der das Event benennt. Zum Beispiel könntest du den String payment dot successful verwenden. Der Value, der an diesen Key angehängt ist, ist ein Standard Path Item Object. Das ist exakt dieselbe Struktur, die du verwendest, um deine normalen REST Endpoints zu definieren. Innerhalb dieses Path Item Objects deklarierst du die HTTP-Methode, die deine Plattform nutzen wird, um das Event auszuliefern, was fast immer ein POST Request ist. Hier ist die wichtigste Erkenntnis. Die Perspektive ist komplett umgedreht, aber die Tools bleiben identisch. Du nutzt Standard Schema Objects, um den Request Body zu definieren, den deine Plattform senden wird. Im payment dot successful Szenario gibst du an, dass der Payload ein JSON Object sein wird, das eine eindeutige Payment-ID, den exakt abgebuchten Betrag und einen Timestamp enthält. Du kannst auch Header definieren. Das ist für Webhooks extrem wichtig, weil du normalerweise einen kryptografischen Signature Header dokumentieren musst, damit der Consumer verifizieren kann, dass der Payload wirklich von dir kommt. Zum Schluss dokumentierst du die Responses, die du vom Consumer zurückerwartest. Du könntest angeben, dass dein System innerhalb von drei Sekunden einen 200 OK Status Code erwartet, andernfalls wird dein System die Zustellung später nochmal versuchen. Indem du diese Reverse-API-Dokumentation standardisierst, gibst du Consumern alles, was sie brauchen, um ihren eigenen Server-Code zu generieren. Sie wissen genau, welchen Payload sie parsen, welche Header sie validieren und welche Status Codes sie zurückgeben müssen. Das Root-Level webhooks-Feld verschiebt das API-Design von simplen Request-Response-Interaktionen hin zu einer vollständig dokumentierten, event-driven Architektur. Das war's für diese Folge. Danke fürs Zuhören und keep building!
14

Zustandsübergänge mit Links

4m 59s

API-Workflows dynamisch abbilden. Wir untersuchen das Link Object, um Beziehungen zwischen Operationen zu beschreiben und einen pragmatischen Ansatz für HATEOAS zu bieten.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und Swagger Ecosystem, Folge 14 von 19. Einen User zu erstellen, ist der erste Schritt, aber woher weiß ein automatisierter Client intuitiv, wo er als Nächstes das User-Profil abrufen kann? Du könntest den Workflow in deinem Client-Code hardcoden, aber das bricht in dem Moment, in dem sich deine API-Struktur ändert. Die Lösung dafür sind State Transitions mit Links. In OpenAPI sitzt das Link-Objekt in einer Response und mappt Daten aus dieser Response auf Parameter einer anderen Operation. Um das ganz klar zu sagen: Links führen Requests nicht automatisch aus. Sie machen OpenAPI nicht zu einer aktiven Orchestration Engine. Sie liefern deinem Tooling, deinen SDKs oder deiner Dokumentation einfach nur statische Anweisungen, wie der nächste logische Request in einem Workflow zusammengebaut wird. Wenn du schon mal APIs gebaut hast, denkst du jetzt vielleicht, das klingt exakt nach striktem HATEOAS, wo der Server dynamische Hypermedia-Links in der Response Payload mitschickt. OpenAPI-Links bieten eine entwicklerfreundliche Alternative zu diesem Ansatz. Anstatt das Backend zu zwingen, zur Runtime dynamische URIs in jede einzelne Response zu injecten, beschreiben OpenAPI-Links die Workflow State Transitions statisch direkt in der API-Definition. Client-Tools können den Workflow verstehen, ohne Live-Payloads parsen zu müssen, um herauszufinden, welche Actions möglich sind. Die Logik funktioniert so, dass eine Source Response mit einer Target Operation verbunden wird. Stell dir einen Standard-POST-Request vor, mit dem ein neuer User erstellt wird. Die Response liefert einen JSON Body zurück, der eine neu generierte User-ID enthält. Innerhalb dieser spezifischen Response-Definition fügst du eine Links Map hinzu. Jeder Eintrag in dieser Map definiert eine Beziehung zu einer anderen Operation, wie zum Beispiel dem GET-Request, der das User-Profil abruft. Du identifizierst die Target Operation über eines von zwei Feldern, die sich gegenseitig ausschließen. Das erste ist die Operation ID, ein einfacher String, der dem Unique Identifier der Target Operation entspricht. Das zweite ist die Operation Reference, die einen Standard-JSON-Pointer verwendet, um durch das OpenAPI-Dokument zu navigieren und den Target Path und die HTTP-Methode zu finden. Die Operation ID ist generell sauberer, wenn deine API sie konsistent definiert, während die Operation Reference nützlich ist, um auf Operationen in externen OpenAPI-Dokumenten zu verweisen. Sobald du auf die Target Operation verweist, musst du sie mit den richtigen Daten füttern. Das machst du mit einer Parameters Map. Die Keys in dieser Map repräsentieren die Parameter-Namen, die die Target Operation erwartet, wie zum Beispiel den User-ID Path Parameter. Die Values sind Runtime Expressions, die dem Tooling sagen, wo diese Daten aus dem aktuellen Kontext extrahiert werden sollen. Eine Runtime Expression ist eine spezifische Syntax, die Daten während des API-Calls auswertet. Du kannst eine Expression schreiben, die den Client anweist, sich den Response Body anzusehen, das ID-Feld zu finden und seinen Value zu extrahieren. Du bist dabei nicht auf den Response Body beschränkt. Runtime Expressions können Values aus den Response Headers, dem ursprünglichen Request Path oder den ursprünglichen Request Query Parametern extrahieren. Wenn die Target Operation einen Request Body anstelle von reinen Parametern benötigt, bietet das Link-Objekt ein Request Body Feld. Damit kannst du eine Runtime Expression direkt in die Payload des darauffolgenden Requests mappen. Wenn ein SDK-Generator diese Links verarbeitet, kann er automatisch Chained Method Calls erstellen. So kann ein Entwickler einen User erstellen und auf dem zurückgegebenen Objekt sofort eine generierte Methode aufrufen, um das Profil abzurufen. Hier ist die entscheidende Erkenntnis. Die wahre Stärke des Link-Objekts liegt darin, dass es die Lücke zwischen isolierten Endpoints schließt und ein flaches Dictionary von API-Pfaden in eine navigierbare Map von Actions verwandelt, denen deine Clients sicher folgen können, ohne auf hardcodierte URLs angewiesen zu sein. Danke fürs Zuhören – bis zum nächsten Mal.
15

Interaktive Dokumentation mit Swagger UI

3m 53s

Deine Spezifikation zum Leben erwecken. Entdecke, wie du Swagger UI installierst und bereitstellst, um Entwicklern ein interaktives, visuelles Dokumentationsportal zu bieten.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und das Swagger-Ökosystem, Folge 15 von 19. Eine perfekt formulierte JSON-Spezifikation ist nutzlos, wenn die Entwickler, die deine API nutzen, sie nicht lesen wollen. Du musst sie visualisieren. Genau hier kommen Interactive Docs mit Swagger UI ins Spiel. Bisher haben wir ein OpenAPI-Dokument als reine Textdatei mit Endpoints und Schemas betrachtet. Swagger UI nimmt diese JSON- oder YAML-Datei und wandelt sie in eine interaktive Webseite um. Dadurch verlagert sich der Fokus vom Schreiben der Spezifikation hin zur aktiven Nutzung. Entwickler können Endpoints durchsuchen, Query-Parameter prüfen und Live-HTTP-Requests direkt im Browser ausführen. Es fungiert als Brücke zwischen einem statischen Contract und einem Live-Testing-Tool. Wenn du dieses Interface selbst hosten möchtest, wirst du wahrscheinlich mit dem Node Package Manager beginnen. Bei der Installation wirst du sofort auf eine häufige Namensfalle stoßen. Es gibt zwei Haupt-Packages. Das erste heißt einfach swagger Bindestrich ui. Verwende dieses Package nur, wenn du ein Build-Tool wie Webpack oder Rollup ausführst, um eine eigene Frontend-Applikation zu kompilieren. Wenn es dein Ziel ist, die Dokumentation einfach direkt zu hosten, brauchst du das Package namens swagger Bindestrich ui Bindestrich dist. Das dist Suffix steht für Distribution. Es enthält die pre-built, ready-to-serve statischen Assets wie die Core-JavaScript-Bundles, CSS-Stylesheets und eine index HTML-Datei. Du legst diese Dateien einfach auf einem beliebigen Webserver ab, und sie funktionieren sofort. Wenn du gar keine Node-Packages oder lokalen Dateien verwalten möchtest, kannst du genau dieselben statischen Assets über ein Content Delivery Network wie unpkg in eine leere Webseite einbetten. Du fügst ein Standard-HTML-Style-Tag hinzu, das auf die Swagger UI CSS-Datei auf unpkg verweist, und ein Script-Tag für das JavaScript-Bundle. Dann schreibst du einen kurzen Initialisierungsblock in JavaScript, der auf die Webadresse verweist, unter der deine OpenAPI-Datei liegt. Der Browser lädt die leere Seite, holt die Assets aus dem Netzwerk, ruft deine Spezifikation ab und rendert das komplette Interface automatisch. Hier ist der entscheidende Punkt. Du musst nicht einmal HTML schreiben, um dieses Interface zu deployen. Die sauberste und skalierbarste Methode ist die Verwendung des offiziellen Docker-Images. Du pullst einfach das Image namens swaggerapi slash swagger Bindestrich ui. Wenn du es komplett out of the box ausführst, wird ein Standard-Petstore-Beispiel geladen. Um stattdessen deine eigene lokale Datei auszuliefern, mountest du deine Spezifikation als Volume in den Container. Dann übergibst du eine Environment-Variable namens SWAGGER Unterstrich JSON, die auf den genauen Pfad zeigt, an dem du diese Datei im Container gemountet hast. Zuerst führst du den Docker run Befehl aus und mappst einen exposed Port wie achtzig auf deine lokale Maschine. Als Nächstes mappst du dein lokales Verzeichnis, das deine swagger Punkt json Datei enthält, auf ein Verzeichnis innerhalb des Containers. Schließlich setzt du die SWAGGER Unterstrich JSON Environment-Variable so, dass sie auf diesen spezifischen internen Dateipfad zeigt. Wenn der Container startet, fährt er einen schlanken Webserver hoch, liest deine Environment-Variable aus, um die Spezifikation zu finden, und liefert die UI aus. Du erhältst in Sekundenschnelle ein voll funktionsfähiges Dokumentationsportal, ohne eine einzige lokale Dependency zu installieren. Indem das Rendering der Dokumentation vom API-Source-Code selbst entkoppelt wird, verwandelt Swagger UI einen statischen Text-Contract in eine ausführbare Testing-Environment, die sich nahtlos in jede Infrastruktur einfügt. Danke, dass du ein paar Minuten mit mir verbracht hast. Bis zum nächsten Mal, mach's gut.
16

Swagger UI anpassen

3m 58s

Die Developer Experience maßschneidern. Wir befassen uns mit der Konfiguration von Swagger UI, der Anpassung von Anzeigeoptionen und der Aktivierung von Funktionen wie Deep Linking und Syntax Highlighting.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und das Swagger-Ökosystem, Folge 16 von 19. Deine API-Dokumentation braucht zehn Sekunden zum Laden, und jedes Mal, wenn ein Entwickler einem Kollegen einen bestimmten Endpoint zeigen möchte, muss er manuell aufschreiben, wie man nach unten scrollt und ihn findet. Die Standardeinstellungen sind dafür da, geändert zu werden. Lass uns das Interface so anpassen, dass deine Entwickler in Millisekunden genau das finden, was sie brauchen. Hier dreht sich alles darum, die Swagger UI anzupassen. Bevor wir etwas ändern, müssen wir eine klare Grenze ziehen. Die Einstellungen, die wir besprechen, gehören nicht in dein OpenAPI Specification Document. Das sind Runtime-Konfigurationen. Du modifizierst das Interface, das das Dokument rendert, nicht das Dokument selbst. Du kannst diese Parameter auf zwei Arten injecten. Wenn du die UI-Files selbst hostest, übergibst du beim Laden der Webseite ein Configuration Object an den Swagger UI JavaScript Constructor. Wenn du das offizielle Swagger UI Docker Image verwendest, übergibst du genau dieselben Properties direkt als Environment Variables an den Container. Die grundlegendste Einstellung sagt dem Interface, wo es deine Spec findet. Wenn du eine einzige API hast, verwendest du den Parameter namens url, im Singular, und übergibst ihm einen String-Pfad. Aber wenn du eine Microservice-Architektur mit mehreren separaten APIs hast, verwendest du den Parameter urls, im Plural. Du übergibst ihm ein Array, das Objects enthält, jedes mit einem Namen und einem Link. Das generiert automatisch ein Dropdown-Menü in der oberen Leiste des Interfaces, wodurch der User nahtlos zwischen verschiedenen API-Definitionen wechseln kann. Stell dir nun eine riesige Enterprise-API mit Hunderten von Pfaden und komplexen Datenmodellen vor. Wenn Swagger UI versucht, all das auf einmal auf dem Bildschirm zu rendern, friert der Browser ein. Der Parameter, der das steuert, ist docExpansion. Standardmäßig steht er auf dem Wort list, was alle Top-Level-Tags aufklappt, aber die Operation-Details versteckt. Du kannst ihn auf full ändern, wodurch absolut alles auf der Seite aufgeklappt wird. Um jedoch bei einer riesigen API Ladezeit zu sparen, solltest du docExpansion auf none setzen. Das zwingt das Interface dazu, komplett zusammengeklappt zu laden. Das spart massiv Memory und rendert sofort, sodass der User nur das öffnen muss, was er auch wirklich braucht. Sobald der User findet, was er braucht, wird er es teilen wollen. Standardmäßig ändert das Klicken durch Operations in der Swagger UI nicht die Adressleiste des Browsers. Wenn du den Parameter deepLinking auf true setzt, hängt das Interface jedes Mal ein Hash-Fragment an die URL an, wenn ein User einen Endpoint oder Tag aufklappt. Deine Entwickler können genau diese URL kopieren und an einen Kollegen schicken, sodass dieser exakt bei einer bestimmten Operation landet, anstatt ganz oben auf der Seite. Hier ist der entscheidende Punkt. Wenn deine Dokumentation primär als Sandbox dient, willst du die Reibung reduzieren. Normalerweise muss ein User auf einen Button namens Try it out bei einer Operation klicken, um die Input-Felder freizuschalten. Wenn du das Flag tryItOutEnabled auf true setzt, sind diese Input-Felder in dem Moment aktiv, in dem die Operation aufgeklappt wird. Der User kann einfach tippen und ausführen, ohne diesen extra Klick. Das Customizing der Swagger UI zur Runtime gibt dir die Möglichkeit, die Documentation Experience rund um die Absicht des Users zu gestalten und so ein generisches Rendering in ein High-Performance-Tool zu verwandeln, das genau auf dein Team zugeschnitten ist. Danke fürs Zuhören. Macht's gut zusammen.
17

Designen mit Swagger Editor

3m 24s

API-Definitionen mit sofortigem Feedback schreiben. Erkunde die Funktionen, die Installation und die Echtzeit-Validierungsfunktionen des klassischen Swagger Editor.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und das Swagger-Ökosystem, Folge 17 von 19. OpenAPI Specs von Hand in einem Standard-Texteditor zu schreiben, ist ein Albtraum aus Tippfehlern und falsch ausgerichteten Klammern. Du brauchst eine Umgebung, die dich in der Millisekunde anmeckert, in der du einen Path falsch einrückst. Genau das bietet dir Designing with Swagger Editor. Der Swagger Editor ist nicht einfach nur eine Textbox. Er ist eine Integrated Development Environment, die speziell für den OpenAPI-Standard gebaut wurde. Seine Hauptaufgabe ist es, dir dabei zu helfen, deine API von Grund auf zu designen, zu definieren und zu dokumentieren. Das Layout ist zweigeteilt. Auf der linken Seite steht dein roher YAML- oder JSON-Code. Die rechte Seite zeigt die gerenderte interaktive Dokumentation. Hier ist der entscheidende Punkt. Der Editor validiert deine Syntax in Echtzeit gegen die OpenAPI Spec. Wenn du einen Objektnamen falsch schreibst oder ein Required Field vergisst, markiert er den Fehler sofort und sagt dir genau, welche Zeile kaputt ist. Du musst kein separates Build Script ausführen, um herauszufinden, dass deine Einrückung nicht stimmt. Wir müssen kurz etwas zu den Versionen klären. Der klassische Swagger Editor, bekannt als Version 4, ist ein Legacy Tool. Er unterstützt OpenAPI 2.0 und 3.0 vollständig. Er ist nicht nativ für OpenAPI 3.1.0 gebaut. Wenn du eine 3.1.0 Spec in den klassischen Editor einfügst, schlägt die Validation fehl. Für moderne 3.1.0 Specs musst du auf Swagger Editor Next wechseln, den wir im Finale behandeln werden. Aber für Standard 3.0 Arbeit bleibt der klassische Editor tief in vielen Workflows verankert. Du kannst den klassischen Editor direkt in deinem Browser nutzen, ohne etwas zu installieren. Allerdings ist das Einfügen von proprietären API-Designs in eine öffentliche Website ein schneller Weg, dein Security-Team wütend zu machen. Hier kommt die lokale Ausführung ins Spiel. Du kannst den Swagger Editor lokal auf deiner eigenen Maschine laufen lassen. Du kannst ihn über npm installieren, indem du dir das swagger-editor Package ziehst und einen lokalen Server startest. Ein noch saubererer Ansatz ist die Nutzung von Docker. Du pullst das Image swaggerapi slash swagger-editor und fährst einen Container hoch, der auf deinen lokalen Port gemappt ist. Dadurch läuft exakt derselbe visuelle Editor komplett auf deiner Maschine. Dieses Setup erlaubt es Teams, sicher hinter einer Corporate Firewall zu designen, ohne unveröffentlichte Specs dem öffentlichen Internet preiszugeben. Die gesamte Real-Time Validation passiert lokal. Weil der Editor sofortiges visuelles Feedback liefert, designst du schneller. Du planst deine Paths, definierst deine Data Models und verifizierst sofort, ob die resultierende Dokumentation Sinn ergibt. Du fängst strukturelle Fehler schon in der Designphase ab, lange bevor du deine Backend-Logik schreibst. Wenn du diese Episoden hilfreich findest, kannst du die Show unterstützen, indem du auf Patreon nach DevStoriesEU suchst. Der absolut wertvollste Aspekt des Editors ist das sofortige Vertrauen, das er dir gibt: Eine fehlerfreie Spec auf dem Bildschirm garantiert, dass deine Downstream Tools reibungslos funktionieren. Das war's für diese Folge. Danke fürs Zuhören und keep building!
18

Automatisieren mit Swagger Codegen

4m 14s

Spezifikationen in Boilerplate-Code verwandeln. Lerne, wie Swagger Codegen v3 dein OpenAPI-Dokument nutzt, um sofort Server-Stubs und Client-Bibliotheken zu generieren.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und das Swagger-Ökosystem, Folge 18 von 19. Du hast Stunden damit verbracht, die perfekte Spezifikation zu entwerfen. Schau jetzt zu, wie sie in nur drei Sekunden Tausende Zeilen Servercode für dich schreibt. Das ist der Lohn für das Automatisieren mit Swagger Codegen. Zuerst müssen wir eine häufige Versionsfalle klären. Swagger Codegen Version zwei unterstützt ausschließlich ältere Swagger 2.0 Spezifikationen. Wenn du den modernen OpenAPI 3.0 Standard verwendest, musst du Swagger Codegen Version drei benutzen. Diese Folge konzentriert sich komplett auf Version drei. Swagger Codegen ist eine Template-driven Engine, die dein OpenAPI-Dokument liest und automatisch Application Code baut. Sie übersetzt deine Design-Dateien in echte Klassen, Interfaces und Network Operations. Das ist die ultimative Belohnung von Design-First Development. Anstatt Hunderte von Boilerplate-Dateien für HTTP Routing, Parameter Parsing und Object Models manuell zu tippen, überlässt du der Maschine die repetitive Arbeit. Der Generator erzeugt zwei Haupttypen von Code. Erstens baut er Client SDKs. Wenn du einen Python, JavaScript oder Go Client brauchst, um mit deiner API zu sprechen, erstellt Codegen eine sofort einsatzbereite Library. Das Client Package übernimmt automatisch die HTTP Requests, das URL Formatting und das Response Parsing. Frontend-Entwickler oder andere Microservice-Teams können diese generierte Library einfach importieren und Methoden nativ aufrufen, anstatt Network Requests von Hand zu bauen. Zweitens generiert es Server Stubs. Ein Server Stub ist das strukturelle Gerüst deiner Backend-Anwendung. Er enthält das API Routing, die Data Models und die Input Validation Layers. Er verkabelt alles so, dass der Server sofort starten und auf Traffic hören kann. Der generierte Code fängt eingehende HTTP Requests ab, validiert den Payload gegen dein OpenAPI-Schema und übergibt die sauberen Daten an eine leere Funktion. Deine einzige Aufgabe als Entwickler ist es, diese leeren Funktionen mit deiner eigentlichen Business Logic, wie Datenbankabfragen oder Berechnungen, zu füllen. Lass uns mal durchgehen, wie du das Ganze in der Praxis ausführst. Swagger Codegen wird normalerweise über ein Command-Line Interface mit einer Java Archive Datei ausgeführt. Du öffnest dein Terminal und führst den Java-Befehl mit dem dash jar Flag aus, das auf die swagger-codegen-cli dot jar Datei zeigt. Du übergibst ihm den generate Befehl. Als Nächstes gibst du drei wichtige Flags an. Du benutzt dash i, um deine Input-Datei anzugeben, wie zum Beispiel openapi dot yaml. Du benutzt dash l, um deine Zielsprache und dein Framework festzulegen. Wenn du zum Beispiel spring übergibst, sagst du dem Tool, dass es eine Java Spring Boot Anwendung bauen soll. Zum Schluss benutzt du dash o, um das Output-Verzeichnis anzugeben. Du führst den Befehl aus. In wenigen Sekunden parst das Tool die Spezifikation. Es mappt jeden String, jeden Integer und jedes Array, das in deinem OpenAPI-Dokument definiert ist, auf die äquivalenten Native Types in Java. Es greift auf eine Library von vorgefertigten Logic Templates für das Target Framework zurück, um diese Typen zusammenzufügen. Das Ergebnis ist eine komplette Verzeichnisstruktur voller Controller, Konfigurationsdateien und Data Classes. Du kannst dieses Output-Verzeichnis sofort kompilieren, den Server starten und die Endpoints, die du designt hast, erfolgreich aufrufen. Hier ist die wichtigste Erkenntnis. Code Generation spart nicht nur im Vorfeld Zeit. Indem du deine Serverstruktur und deine Client Libraries direkt aus derselben OpenAPI-Datei steuerst, garantierst du, dass deine Implementierung perfekt zu deinem Contract passt, was Integrationsfehler zwischen Teams auf null reduziert. Das war's für diese Folge. Danke fürs Zuhören und keep building!
19

Die Zukunft: Swagger Editor Next

3m 57s

Die Evolution des API-Designs annehmen. Wir stellen Swagger Editor Next, seine Architektur und seine leistungsstarke Unterstützung für OpenAPI 3.1 und die AsyncAPI-Spezifikation vor.

Herunterladen
Hallo, hier ist Alex von DEV STORIES DOT EU. OpenAPI und das Swagger Ecosystem, Folge 19 von 19. REST-APIs sind nicht mehr der einzige Weg, wie Systeme kommunizieren. Es ist Zeit für ein Tool, das Kafka und Event-driven Architectures genauso gut versteht wie HTTP. Dieses Tool ist Swagger Editor Next. Auch bekannt als Version 5, ist dies ein kompletter Rebuild des Standard-Interfaces, das dir vielleicht schon bekannt ist. Der klassische Swagger Editor ist eng mit synchronen HTTP-APIs und älteren Rendering-Techniken verknüpft. Er funktioniert gut mit OpenAPI 3.0, kann aber beim Validieren extrem großer Dateien einfrieren oder laggen. Swagger Editor Next ersetzt diese in die Jahre gekommene Infrastruktur. Er ist komplett auf einem modernen React und Webpack Stack aufgebaut. Das ist der Teil, auf den es ankommt: Der zugrundeliegende Text Input wird jetzt vom Monaco Editor angetrieben. Das ist exakt dieselbe Technologie, die auch Visual Studio Code antreibt. Weil er auf Monaco setzt, verarbeitet Swagger Editor Next massive Specification Files ohne zu stottern. Er bietet robustes Syntax Highlighting, sofortige Fehlererkennung und präzise Line-Level Validation, die die klassische Version einfach in den Schatten stellt. Du tippst effektiv in eine schlanke IDE statt in ein Webformular. Das deckt die Engine ab. Was ist mit den eigentlichen Specifications? Swagger Editor Next bringt zwei große native Features mit. Erstens unterstützt er OpenAPI 3.1.0 out of the box. Diese spezifische OpenAPI-Version ist komplett auf JSON Schema abgestimmt, was bedeutet, dass du deutlich komplexere Datenmodelle und wiederverwendbare Components bauen kannst als noch in Version 3.0. Zweitens rendert Swagger Editor Next nativ AsyncAPI Specifications. Das ist der definitive Weg nach vorn für Entwickler, die Event-driven Microservices neben traditionellen APIs verwalten. AsyncAPI nutzt eine Struktur, die OpenAPI sehr ähnlich ist, aber anstatt HTTP Paths und GET Requests zu definieren, dokumentiert es Message Broker, Topics und asynchrone Events. Um zu sehen, wie das in der Praxis funktioniert, schau dir ein Smart-City-Netzwerk an, das Straßenlaternen steuert. Hättest du nur Tools für REST, würdest du vielleicht versuchen, einen HTTP POST Endpoint zu erzwingen, um einen konstanten Stream von Sensordaten abzubilden. Mit Swagger Editor Next schreibst du einfach ein AsyncAPI Document. Du definierst einen Channel namens smart-city-streetlights. Du weist Kafka als Protokoll zu. Dann spezifizierst du eine Publish Operation, die die genaue JSON-Struktur beschreibt, die der Sensor ausgibt, wenn ein Licht angeht. Während du deine Specification auf der linken Seite des Bildschirms eintippst, validiert der Monaco Editor die AsyncAPI-Syntax. Auf der rechten Seite rendert das Interface ein strukturiertes, interaktives visuelles Document. Es zeigt die Kafka Topics, die erwarteten Message Payloads und die Protocol Headers klar an. Du brauchst keine separaten Toolchains mehr für deine synchronen APIs und deine Event-driven Microservices. Das Ecosystem hat sich weiterentwickelt, um beides gleichzeitig zu handhaben. Der Shift hin zu asynchronen Events bedeutet nicht, dass du bei deiner Dokumentation bei null anfangen musst; es erfordert nur einen modernen Editor, der in der Lage ist, diese neuen Standards zu lesen. Da dies unsere Serie abschließt, nimm dir einen Moment Zeit, lies die offizielle Dokumentation, lade dir Swagger Editor Next und versuche selbst, ein Kafka Topic zu modellieren. Wenn du eine Idee für eine komplett neue Serie hast, besuche devstories dot eu und lass es uns wissen. Das war's für diese Folge. Bis zum nächsten Mal!