Generierung von Client APIs mit Swagger Teil 1
Integration von Swagger in Spring Boot, Generierung des TypeScript-Axios API-Clients und Verwendung in einer React-Web-App.


Also available in English at Medium.com.
Mit jedem neuen Backend-Release müssen Frontend-Entwickler*innen große Teile des API-Clients neu schreiben. Was wäre, wenn es eine Lösung gäbe, um den gesamten Client in nur wenigen Sekunden zu aktualisieren?
In diesem Blog-Post stellen wir die Client-Generierung von Swagger vor, zeigen, wie man die generierte API in React-Anwendungen verwendet und wie man das Authentifizierungs-Token von Auth0 integriert.

Der Einfachheit halber wird dieses Thema in eine dreiteilige Serie aufgeteilt:
- Teil 1: Integration von Swagger in Spring Boot, Generierung des API-Clients und Verwendung als Teil einer React-Web-App
- Teil 2: Sicherung der Endpunkte mit Auth0 und Autorisierung der Anfragen der Web-Clients
- Teil 3: Verwendung des generierten API-Clients als Teil einer React Native App.
Integration von Swagger in Spring Boot und Generierung des Clients
Ziel dieses Abschnitts ist es, die API-Dokumentation einer Java-Spring-Boot-Anwendung mit Swagger zu generieren, den entsprechenden TypeScript-Axios-Client zu erstellen, der die API-Aufrufe kapselt, und diesen Client in eine React-Web-App zu integrieren. Das Ergebnis wird wie folgt aussehen:

TL;DR
- Klonen Sie unser Beispiel-Backend, starten Sie Docker und führen Sie die Anwendung mit dem Spring-Boot-Profil
no-securityaus. - Klonen Sie unsere Beispiel-Web-App, installieren Sie alle Abhängigkeiten mit
yarn installund führen Sieyarn generate-apiim Stammverzeichnis des Projekts aus.
Schritt 1) Integrieren von Swagger in Spring Boot
Alle Codeschnipsel sind Teil unseres Beispiel-Backends. Diese Backend-Anwendung ermöglicht die Verwaltung von Projekten, die jeweils den Namen eines Kunden und seine Adresse enthalten. Mit Hilfe der API-Endpunkte kann ein Nutzer Projekte erstellen, lesen, aktualisieren und löschen (CRUD).
1a) Kommentieren Sie die Controller und fügen Sie Metadaten über jeden Endpunkt hinzu
Nach dem Hinzufügen der Abhängigkeit springdoc-openapi-ui zur build.gradle bzw. pom.xml können Sie die darin enthaltenen Annotationen für die Projekt-Controller verwenden, um Metadaten hinzuzufügen:
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@Tag(name = "Project Controller")
@RequestMapping("/api/project")
public class ProjectController {
private final ProjectService projectService;
private final ProjectApiMapper projectMapper;
@Transactional(readOnly = true)
@GetMapping
@Operation(summary = "Get list of all projects")
public ResponseEntity<List<ProjectTO>> getAllProject() {
log.debug("Received request to load all projects");
final List<Project> allProjects = this.projectService.getAllProjects();
return ResponseEntity.ok(this.projectMapper.mapToTO(allProjects));
}
...
1b) Besuchen Sie die generierte API-Dokumentation
- Wie in der ReadMe des Projekts beschrieben, müssen beide Docker-Dienste (nginx und postgres) laufen, bevor Sie das Beispiel-Backend starten können.
- Bitte stellen Sie sicher, dass Sie in den Run-Konfigurationen das Profil
no-securityaktiviert haben: IntelliJ → Run → Edit Configurations… → Active profiles:no-security - Jetzt sollten Sie in der Lage sein, die API-Dokumentation in Ihrem Browser zu öffnen: http://localhost:8081/swagger-ui.html

Schritt 2) Den API-Client generieren
Es gibt mehrere Möglichkeiten, einen API-Client mit Swagger zu erzeugen: Sie können ein Gradle- oder Maven-Plugin verwenden, den Swagger-Editor oder eine JavaScript-Bibliothek eines Drittanbieters verwenden.
Unserer Meinung nach sollte die Generierung des API-Clients nicht Teil des Backends sein. Deshalb haben wir uns zunächst für den Swagger-Editor entschieden und haben später auf die Bibliothek openapi-generator-cli gewechselt, um die Vorteile von stark typisierten Schnittstellen in TypeScript zu nutzen.
In diesem Abschnitt werden wir beide Wege, den Swagger-Editor und die openapi-generator-cli, erläutern:
2a) Swagger-Editor
- Öffnen Sie die URL http://localhost:8081/v3/api-docs und kopieren Sie alles.
- Rufen Sie den Swagger-Editor (https://editor.swagger.io/) auf und fügen Sie die kopierte API-Beschreibung in das Editor-Fenster ein → Sie werden gefragt, ob Sie ihn in .yaml umwandeln wollen → Akzeptieren Sie.
- Im Menü des Swagger-Editors finden Sie das Dropdown-Menü “Generate Client”. Wählen Sie “TypeScript Axios” und warten Sie, bis der Download abgeschlossen ist.
- Entpacken Sie es, kopieren Sie
api.ts,base.ts,configuration.ts,apis-folderundmodels-folderin einen neuen Ordner in Ihrem Frontend-Projekt.
2b) openapi-generator-cli
-
Fügen Sie
@openapitools/openapi-generator-climit dem folgenden Befehl alsdev-Abhängigkeit in Ihre Web-App ein:yarn add --dev @openapitools/openapi-generator-cli -
Vergewissern Sie sich, dass Ihr Backend gestartet ist und läuft.
-
Führen Sie den folgenden Befehl aus:
yarn openapi-generator-cli generate \
-i http://localhost:8081/v3/api-docs \
-g typescript-axios \
-o src/api
Optional: Löschen Sie die Dateien .npmignore, .gitignore und git_push.sh, und fügen Sie sie der Datei .openapi-generator-ignore hinzu. Fügen Sie openapitools.json und .openapi-generator zur Datei .gitignore Ihres Projekts hinzu.
Schritt 3) Verwendung des API-Clients in einer React-Webanwendung
Um mit der generierten API unter Verwendung von nginx als Reverse Proxy zu arbeiten, müssen Sie zuerst die BASE_PATH-Variable in src/api/base.ts auf einen leeren String setzen:
export const BASE_PATH = "";
Jetzt können Sie mit nur drei Zeilen Code Daten vom API-Endpunkt abrufen:
const projectController = new ProjectControllerApi();
const response = await projectController.getAllProject();
const data = response.data;
In unserer Beispiel-Web-App haben wir alle API-Aufrufe in einer Helper-Methode gekapselt, um Fehler abfangen zu können. Zusätzlich verwenden wir redux-store, um die empfangenen Daten zu cachen, was uns erlaubt, die Backend-Aufrufe zu reduzieren.
Im nächsten Teil der Serie werden wir uns damit beschäftigen, wie wir die API-Endpoints mithilfe von Auth0 absichern und die Anfragen unserer Web-App entsprechend autorisieren können. Bis zum nächsten Mal!

Fandest du den Artikel interessant?
Abonniere unseren Newsletter und erhalte neue Beiträge direkt ins Postfach.
Das könnte dich auch interessieren
Ähnliche Beiträge aus unseren Insights

Agent-Skills: Wie AI auch in Nischen-Domänen wie BPMN & Prozessautomatisierung zuverlässig wird
AI macht Routine-Coding austauschbar – doch in Nischen-Domänen wie der Prozessautomatisierung mit BPMN und Zeebe liefern reine Prompts inkonsistente Ergebnisse. Wie Agent-Skills Domänenwissen kodieren und AI auch hier zuverlässig machen.


Warum ich jede npm-Dependency pinne: eine kleine Gewohnheit, die ein kompromittiertes Paket übersteht
Eine kurze Reflexion darüber, warum sich der Mehraufwand beim Upgrade lohnt, wenn du npm-Dependencies pinnst – und wie eine kleine CI-Guardrail dafür sorgt, dass die Praxis im Team auch Bestand hat.


Warum wir uns gegen Microservices und für einen modularen Monolithen mit Camunda 7 entschieden haben
Warum ein modularer Monolith mit Camunda 7 für ein kleines Projektteam die bessere Wahl war und welche Trade-offs diese Architektur mit sich bringt.

Innerhalb eines Tages weißt du, wo du stehst.
Kein Verkaufsgespräch, sondern eine ehrliche Einschätzung, ob und wie Automatisierung dir hilft.
Erstgespräch vereinbarenKein Commitment. Kein Pitch-Deck. Nur Klarheit.