Как перестать писать документацию к API руками и полюбить Swagger Core

23 Jun, 2026
7,529
🔱 2,256
👥 307

Представь ситуацию: фронтенд-разработчик просит актуальную схему эндпоинта, а ты полчаса ищешь в коде, какие именно поля приходят в JSON и почему один из параметров вдруг стал обязательным. Если ты пишешь на Java и используешь JAX-RS, то наверняка знаешь про Swagger. Но часто мы воспринимаем его как некую магическую обертку, которая «просто генерирует страничку с кнопками». На самом деле за этим стоит swagger-core — движок, который превращает твой Java-код в стандарт OpenAPI.

Я периодически возвращаюсь к этому репозиторию, когда стандартные аннотации Spring или Quarkus начинают вести себя странно. Понимание того, как работает «ядро», помогает настраивать описание API гораздо гибче.

Что это за проект

swagger-core — это официальная Java-реализация спецификации OpenAPI. Если коротко: он берет ваши классы, модели и аннотации, а на выходе выдает JSON или YAML файл, который понимают все — от генераторов клиентского кода до тестировщиков.

Проект живет долго, и это видно по количеству веток. Сейчас основная работа идет в версии 2.2.x, которая полностью поддерживает OpenAPI 3.1. Если у вас старый проект на OpenAPI 2.0, придется сидеть на ветке 1.5, но лучше все-таки обновляться.

Поддержка Jakarta и переход с javax

Интересный момент, на который натыкаются многие при обновлении стека: начиная с версии 2.1.7, ребята добавили поддержку неймспейса Jakarta. В мире Java сейчас это главная точка боли — переход с javax.* на jakarta.*.

Реклама

Разработчики swagger-core поступили мудро. Они не стали заставлять всех резко переходить на новый стандарт, а выпускают параллельный набор артефактов с суффиксом -jakarta. Если вы обновили сервер приложений до версии, где используется Jakarta EE 9+, просто добавьте суффикс к зависимостям, и все заработает.

Удобная работа с зависимостями через BOM

В больших проектах легко запутаться в версиях разных модулей Swagger: аннотации одной версии, модели другой, интеграция третьей. Чтобы не ловить MethodNotFoundException в рантайме, в репозитории предлагают использовать Bill of Materials (BOM).

В Maven это выглядит так:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.swagger.core.v3</groupId>
      <artifactId>swagger-bom</artifactId>
      <version>2.2.49</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

После этого можно подключать нужные модули (например, swagger-jaxrs2 или swagger-annotations), не указывая версию вообще. BOM сам проследит, чтобы все части пазла подошли друг к другу. Кстати, плагины для Maven и Gradle в BOM специально не включили, чтобы не было конфликтов при сборке — их нужно прописывать отдельно.

Как это работает на практике

Проект поддерживает JAX-RS 2. Чтобы swagger-core «увидел» ваш API, достаточно расставить аннотации прямо над методами контроллеров.

@GET
@Path("/{username}")
@Operation(summary = "Получить пользователя по имени",
           responses = {
               @ApiResponse(description = "Объект пользователя",
                            content = @Content(mediaType = "application/json",
                            schema = @Schema(implementation = User.class))),
               @ApiResponse(responseCode = "404", description = "Пользователь не найден")
           })
public Response getUserByName(@PathParam("username") String username) {
    // логика
}

Этот код превращается в кусок спецификации OpenAPI. Главный плюс здесь в том, что код остается единственным источником истины. Изменили тип возвращаемого поля в классе User — документация обновилась автоматически после пересборки.

Кому стоит заглянуть в репозиторий

В первую очередь тем, кто хочет выжать максимум из OpenAPI 3.1. Эта версия спецификации принесла много полезного, например, улучшенную работу с webhooks и более гибкие схемы для JSON.

Если вы используете специфические фреймворки, которые не «подцепили» Swagger из коробки, в swagger-core есть модуль swagger-integration. Он позволяет настроить сканирование классов вручную. Это бывает полезно, если у вас сложная иерархия ресурсов или вы используете кастомные загрузчики классов.

В репозитории также лежат примеры интеграции с сервлетами. Если ваш проект на Java — это не очередной микросервис на Spring Boot, а суровый монолит на голых сервлетах, swagger-core поможет прикрутить документацию и туда.

swagger-core — это не тот инструмент, с которым играются на выходных. Это рабочая лошадка, которая берет на себя самую скучную часть работы разработчика.

Кому пригодится:

  • Разработчикам на JAX-RS (Jersey, RestEasy).
  • Тем, кто мигрирует на Jakarta EE.
  • Архитекторам, которым нужно внедрить единый стандарт документации в компании.

Если вы до сих пор описываете API в Word или в комментариях к тикетам в Jira — самое время подключить swagger-core и забыть об этом как об ужасном сне. Живая документация, которую можно пощупать через Swagger UI, экономит часы общения между командами.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.