Swagger/OpenAPI генерация для Java: библиотеки и инструменты

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Swagger/OpenAPI генерация для Java: полный обзор инструментов и библиотек

Современная разработка REST API на Java немыслима без качественной документации. Стандарт OpenAPI (ранее известный как Swagger Specification) стал де-факто индустриальным стандартом для описания HTTP API. В этой статье мы подробно разберём основные библиотеки и инструменты для генерации OpenAPI-спецификаций в Java-приложениях, их возможности, примеры использования и критерии выбора.

Что такое OpenAPI и зачем он нужен?

OpenAPI — это спецификация, описывающая RESTful API в формате JSON или YAML. Она включает:

  • список эндпоинтов и HTTP-методов;
  • модели данных (схемы запросов и ответов);
  • параметры (query, path, header);
  • информацию об аутентификации и авторизации.

Документация, сгенерированная по OpenAPI, позволяет автоматически создавать клиентские SDK, проводить тестирование и поддерживать актуальность описания API. Для Java существует несколько зрелых решений.

1. SpringDoc OpenAPI (рекомендуется для Spring Boot)

SpringDoc — самая популярная библиотека для генерации OpenAPI 3 в экосистеме Spring. Она автоматически сканирует контроллеры, аннотации @RequestMapping, @GetMapping и т.д., и на их основе строит спецификацию.

Подключение (Maven)

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.6.0</version>
</dependency>

Пример контроллера с аннотациями

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Operation(summary = "Получить пользователя по ID")
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "Пользователь найден"),
        @ApiResponse(responseCode = "404", description = "Пользователь не найден")
    })
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        // логика
        return ResponseEntity.ok(new User(id, "Иван", "ivan@example.com"));
    }
}

После запуска приложения документация доступна по адресу /swagger-ui.html, а спецификация в JSON — по /v3/api-docs.

2. Swagger Core (OpenAPI 3.0)

Swagger Core — это низкоуровневая библиотека от создателей спецификации. Она позволяет программно строить объекты OpenAPI и сериализовать их в JSON/YAML. Подходит для случаев, когда нужно тонкое управление генерацией.

Пример программного создания спецификации

import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.info.*;

OpenAPI openAPI = new OpenAPI()
    .info(new Info()
        .title("Пример API")
        .version("1.0.0")
        .description("Документация, созданная вручную"))
    .path("/hello", new PathItem()
        .get(new Operation()
            .summary("Приветствие")
            .operationId("sayHello")
            .addParametersItem(new Parameter()
                .name("name")
                .in("query")
                .required(false)
                .schema(new StringSchema()))
            .responses(new ApiResponses()
                .addApiResponse("200", new ApiResponse()
                    .description("OK")
                    .content(new Content()
                        .addMediaType("text/plain", 
                            new MediaType().schema(new StringSchema())))))));

// Сериализация в JSON
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(openAPI);
System.out.println(json);

3. OpenAPI Generator (генерация кода по спецификации)

OpenAPI Generator — это инструмент, работающий в обратном направлении: по готовой OpenAPI-спецификации он генерирует клиентский или серверный код на Java и других языках. Поддерживает десятки шаблонов (Spring, Micronaut, JAX-RS и др.).

Пример генерации серверного кода через Maven-плагин

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>7.7.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>

После выполнения команды

Рекомендаций