Version récente et configuration plus simple.
Swagger UI (aujourd’hui appelé OpenAPI) permet de générer automatiquement une documentation interactive avec une API REST Spring Boot ou autre.
Documentation officielle
Elle permet :
Maven (pom.xml) :
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.7.0</version> <!-- ou dernière version --> </dependency>
Gradle :
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
Liens vers les versions disponibles sur le repo mvn
En théorie, aucune configuration supplémentaire n’est requise, il suffit de lancer l’application.
Dans notre étude de cas Waouf Waouf, on peut apporter des informations supplémentaires. Ces informations apparaissent en haut de la documentation Swagger UI.
import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.info.Info; import io.swagger.v3.oas.annotations.info.Contact; import org.springframework.context.annotation.Configuration; @Configuration @OpenAPIDefinition( info = @Info( title = "API Fédération Canine (Waouf Waouf)", version = "1.0", description = "Documentation de l’API publique pour la gestion des chiens et des concours", contact = @Contact(name = "Phil", email = "contact@monwaoufwaouf.fr") ) ) public class OpenApiConfig { }
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/chiens") @Tag(name = "Chiens", description = "Endpoints liés aux chiens et à leurs propriétaires") public class ChienController { private final ChienService service; public ChienController(ChienService service) { this.service = service; } @GetMapping @Operation( summary = "Liste tous les chiens", description = "Retourne la liste complète des chiens enregistrés dans la base de données" ) public List<ChienDto> getAll() { return service.getAllChiens(); } @PostMapping @Operation( summary = "Ajoute un nouveau chien", description = "Crée un nouvel enregistrement de chien dans la base" ) public ChienDto create(@RequestBody ChienDto dto) { return service.create(dto); } }
Les annotations Swagger enrichissent automatiquement la documentation générée :
@Tag
@Operation
Swagger restera actif en dev et sera désactivé en prod !
springdoc: api-docs: path: /api-docs enabled: true swagger-ui: path: /swagger-ui.html operationsSorter: method tagsSorter: alpha displayRequestDuration: true
# application.yml springdoc: api-docs: enabled: true swagger-ui: enabled: true --- spring: config: activate: on-profile: prod springdoc: api-docs: enabled: false swagger-ui: enabled: false
springdoc.api-docs.path
/v3/api-docs
springdoc.swagger-ui.path
springdoc.swagger-ui.filter
springdoc.show-actuator
/actuator
springdoc.packages-to-scan
springdoc.paths-to-match
Exemple de code avec l’Adhérent
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @RestController @RequestMapping("/api/adherents") @Tag(name = "Adhérents", description = "Gestion des adhérents de la Fédération Canine") public class AdherentController { @GetMapping("/{id}") @Operation(summary = "Récupère un adhérent par son ID") @ApiResponses({ @ApiResponse(responseCode = "200", description = "Adhérent trouvé"), @ApiResponse(responseCode = "404", description = "Aucun adhérent trouvé") }) public AdherentDto getAdherent(@PathVariable Long id) { // ... return new AdherentDto(); } }