← Назад к вопросам
Что такое Swagger/OpenAPI и для чего его используют?
1.0 Junior🔥 231 комментариев
#REST API и микросервисы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Swagger/OpenAPI: документирование и тестирование API
OpenAPI (ранее известный как Swagger) — это стандартная спецификация для описания REST API. Swagger — это набор инструментов для работы с OpenAPI. Они используются для документирования, тестирования и генерации кода.
Что такое OpenAPI/Swagger?
OpenAPI — это стандарт, который описывает структуру REST API в формате JSON или YAML. Это позволяет:
- Документировать API автоматически
- Тестировать endpoints из интерфейса
- Генерировать клиентские библиотеки
- Генерировать код серверных stubs
Пример OpenAPI спецификации
openapi: 3.0.0
info:
title: User API
version: 1.0.0
description: API для управления пользователями
servers:
- url: http://localhost:8080/api/v1
paths:
/users:
get:
summary: Получить всех пользователей
responses:
200:
description: Успешный ответ
content:
application/json:
schema:
type: array
items:
$ref: #/components/schemas/User
post:
summary: Создать нового пользователя
requestBody:
required: true
content:
application/json:
schema:
$ref: #/components/schemas/CreateUserRequest
responses:
201:
description: Пользователь создан
content:
application/json:
schema:
$ref: #/components/schemas/User
/users/{id}:
get:
summary: Получить пользователя по ID
parameters:
- name: id
in: path
required: true
schema:
type: integer
responses:
200:
description: OK
content:
application/json:
schema:
$ref: #/components/schemas/User
404:
description: Пользователь не найден
components:
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
email:
type: string
createdAt:
type: string
format: date-time
CreateUserRequest:
type: object
required:
- name
- email
properties:
name:
type: string
email:
type: string
Использование в Spring Boot
Для генерации OpenAPI документации используется SpringDoc OpenAPI:
// 1. Добавить зависимость в pom.xml
// <dependency>
// <groupId>org.springdoc</groupId>
// <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
// <version>2.0.0</version>
// </dependency>
@RestController
@RequestMapping("/api/v1/users")
@Tag(name = "Users", description = "API для управления пользователями")
public class UserController {
@GetMapping
@Operation(summary = "Получить всех пользователей",
description = "Возвращает список всех пользователей системы")
@ApiResponse(responseCode = "200", description = "Список пользователей успешно получен")
public List<UserDto> getAllUsers() {
// ...
}
@GetMapping("/{id}")
@Operation(summary = "Получить пользователя по ID")
@ApiResponse(responseCode = "200", description = "Пользователь найден")
@ApiResponse(responseCode = "404", description = "Пользователь не найден")
public UserDto getUserById(
@PathVariable @Parameter(description = "ID пользователя") Long id) {
// ...
}
@PostMapping
@Operation(summary = "Создать нового пользователя")
@ApiResponse(responseCode = "201", description = "Пользователь успешно создан")
public UserDto createUser(
@RequestBody @io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "Данные нового пользователя",
required = true)
CreateUserRequest request) {
// ...
}
@PutMapping("/{id}")
@Operation(summary = "Обновить пользователя")
public UserDto updateUser(
@PathVariable Long id,
@RequestBody UpdateUserRequest request) {
// ...
}
@DeleteMapping("/{id}")
@Operation(summary = "Удалить пользователя")
@ApiResponse(responseCode = "204", description = "Пользователь удалён")
public void deleteUser(@PathVariable Long id) {
// ...
}
}
// Аннотации для DTO
@Data
@ApiModel(description = "Информация о пользователе")
public class UserDto {
@ApiModelProperty(value = "ID пользователя", example = "1")
private Long id;
@ApiModelProperty(value = "Имя пользователя", example = "John Doe")
private String name;
@ApiModelProperty(value = "Email пользователя", example = "john@example.com")
private String email;
}
@Data
public class CreateUserRequest {
@NotBlank(message = "Имя обязательно")
@ApiModelProperty(value = "Имя пользователя", required = true, example = "John Doe")
private String name;
@Email
@NotBlank(message = "Email обязателен")
@ApiModelProperty(value = "Email пользователя", required = true, example = "john@example.com")
private String email;
}
Swagger UI
С помощью SpringDoc OpenAPI автоматически генерируется интерактивный Swagger UI:
http://localhost:8080/swagger-ui.html
Этот интерфейс позволяет:
- Просматривать всю документацию API
- Тестировать endpoints прямо из браузера
- Видеть примеры запросов и ответов
- Проверять схемы данных
Плюсы Swagger/OpenAPI
1. Автоматическая документация:
// Документация генерируется из аннотаций
// Всегда актуальна с кодом
@Operation(summary = "Получить пользователя")
@ApiResponse(responseCode = "200", description = "OK")
public UserDto getUser(@PathVariable Long id) { }
2. Интерактивное тестирование:
- Можно тестировать endpoints из Swagger UI
- Не нужны дополнительные инструменты (Postman, Insomnia)
3. Генерация кода:
# Генерация клиентской библиотеки
openapi-generator-cli generate -i swagger.yaml -g java -o client-sdk/
4. Стандартизация:
- Един ый стандарт для всех REST API
- Легко интегрировать в CI/CD
- API Gateway может использовать OpenAPI
Минусы
1. Дополнительная работа:
- Нужно поддерживать аннотации в синхронизме с кодом
2. Усложнение кода:
- Много аннотаций на контроллерах
Конфигурация для продвинутых сценариев
@Configuration
public class OpenApiConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info()
.title("User Management API")
.version("1.0.0")
.description("API для управления пользователями и профилями")
.contact(new Contact()
.name("Support Team")
.email("support@example.com")))
.addServersItem(new Server()
.url("http://localhost:8080")
.description("Development"))
.addServersItem(new Server()
.url("https://api.production.com")
.description("Production"));
}
}
Использование в практике
# URL документации
http://localhost:8080/swagger-ui.html # Swagger UI
http://localhost:8080/v3/api-docs # JSON спецификация
http://localhost:8080/v3/api-docs.yaml # YAML спецификация
# Интеграция с API Gateway (Kong, AWS API Gateway и т.д.)
# Использование для мониторинга API (в комбинации с SLA)
# Генерация документации для фронтенд-разработчиков
Swagger/OpenAPI — это essential инструмент в modern API разработке, который экономит время и повышает качество API документации.