OpenAPI, früher bekannt als Swagger, ist eine Spezifikation zur Beschreibung von RESTful APIs. Sie ermöglicht es, APIs in einem standardisierten Format zu definieren, das sowohl von Menschen als auch von Maschinen gelesen werden kann. Durch die Verwendung von OpenAPI können Entwickler APIs klar dokumentieren, testen und automatisiert Code generieren.
Swagger wurde ursprünglich entwickelt, um die Erstellung, Dokumentation und den Konsum von RESTful Webservices zu vereinfachen. Mit der Zeit wurde Swagger zur OpenAPI Specification (OAS) weiterentwickelt und ist heute ein weit verbreiteter Standard in der API-Entwicklung.
Eine OpenAPI-Spezifikation ist in YAML oder JSON verfasst und besteht aus mehreren Hauptkomponenten:
openapi: 3.0.1
info:
title: Bücher API
version: 1.0.0
servers:
- url: http://localhost:8080/api
paths:
/books:
get:
summary: Liste aller Bücher abrufen
responses:
'200':
description: Erfolgreiche Antwort
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Book'
components:
schemas:
Book:
type: object
properties:
id:
type: integer
title:
type: string
author:
type: stringSpring Boot bietet mehrere Möglichkeiten, OpenAPI in Anwendungen zu integrieren:
Springdoc OpenAPI
Swagger UI
Fügen Sie in Ihrer pom.xml folgende Abhängigkeit
hinzu:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.14</version>
</dependency>In den meisten Fällen ist keine zusätzliche Konfiguration notwendig. Springdoc scannt automatisch Ihre REST-Controller und generiert die OpenAPI-Dokumentation.
Nach dem Start der Anwendung kann die API-Dokumentation unter
http://localhost:8080/swagger-ui.html oder
http://localhost:8080/swagger-ui/index.html aufgerufen
werden.
import org.springframework.web.bind.annotation.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
@RestController
@RequestMapping("/api/books")
public class BookController {
@Operation(summary = "Liste aller Bücher abrufen")
@ApiResponse(responseCode = "200", description = "Erfolgreiche Antwort",
content = @Content(mediaType = "application/json",
schema = @Schema(implementation = Book.class)))
@GetMapping
public List<Book> getAllBooks() {
// Implementierung
}
@Operation(summary = "Ein Buch anhand der ID abrufen")
@ApiResponse(responseCode = "200", description = "Buch gefunden",
content = @Content(mediaType = "application/json",
schema = @Schema(implementation = Book.class)))
@ApiResponse(responseCode = "404", description = "Buch nicht gefunden")
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
// Implementierung
}
// Weitere Methoden
}import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "Repräsentiert ein Buch im System")
public class Book {
@Schema(description = "Eindeutige ID des Buches", example = "1")
private Long id;
@Schema(description = "Titel des Buches", example = "Spring Boot in Action")
private String title;
@Schema(description = "Autor des Buches", example = "Craig Walls")
private String author;
// Getter und Setter
}Beim Contract-First-Ansatz steht die API-Spezifikation im Zentrum der Entwicklung. Dies bietet mehrere Vorteile:
Erstellen Sie eine OpenAPI-Spezifikation in einer YAML- oder
JSON-Datei (api.yaml), die alle Endpunkte, Modelle und
Sicherheitsaspekte Ihrer API definiert.
Verwenden Sie Werkzeuge wie OpenAPI Generator oder Swagger Codegen, um aus der Spezifikation Server-Stubs und Modelle zu generieren.
Installieren Sie den OpenAPI Generator:
brew install openapi-generatorOder über Docker:
docker pull openapitools/openapi-generator-cliFühren Sie die Code-Generierung aus:
openapi-generator generate -i api.yaml -g spring -o generated-serverspring für
einen Spring Boot Server.Die generierten Stubs enthalten Methoden, die Sie mit der eigentlichen Geschäftslogik füllen müssen.
Versionskontrolle der Spezifikation
Verwalten Sie die OpenAPI-Spezifikation im gleichen Repository wie den Code, um Änderungen nachvollziehen zu können.
Automatisierte Tests
Implementieren Sie Tests, die sicherstellen, dass die Implementierung der Spezifikation entspricht.
Kontinuierliche Integration
Integrieren Sie die Code-Generierung und Validierung in Ihre CI/CD-Pipeline.
Fügen Sie das OpenAPI Generator Maven Plugin zu Ihrer
pom.xml hinzu:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.4.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
<generatorName>spring</generatorName>
<output>${project.build.directory}/generated-sources</output>
</configuration>
</execution>
</executions>
</plugin>OpenAPI / Swagger ermöglicht die standardisierte Beschreibung von RESTful APIs, was Dokumentation, Testing und Code-Generierung erleichtert. Der Contract-First-Ansatz stellt die Spezifikation in den Mittelpunkt und fördert konsistente und effiziente API-Entwicklung. Durch Integration von Tools wie Springdoc OpenAPI können Entwickler in Spring Boot Anwendungen nahtlos OpenAPI nutzen.