← Назад к вопросам

Что такое 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 документации.

Что такое Swagger/OpenAPI и для чего его используют? | PrepBro