Ответ
Swagger — это не реализация протокола, а набор инструментов (ранее — отдельная спецификация) для работы с OpenAPI Specification (OAS).
Ключевые моменты:
-
OpenAPI Specification (OAS) — это стандартная, независимая от языка спецификация (формат описания) для RESTful API. Она описывает конечные точки (endpoints), операции (GET, POST), параметры, форматы запросов/ответов, модели данных и т.д. в структурированном виде (YAML или JSON).
-
Swagger — это экосистема инструментов, которая работает с файлами OpenAPI. Наиболее известные инструменты:
- Swagger UI: Генерирует интерактивную документацию API на основе OAS-файла. Позволяет отправлять тестовые запросы прямо из браузера.
- Swagger Editor: Редактор для создания и валидации OAS-файлов.
- Swagger Codegen: Генератор клиентских SDK, серверных заглушек (stubs) и документации из OAS-файла.
Аналогия: OpenAPI — это как чертеж (спецификация) здания. Swagger Tools — это инструменты (линейка, карандаш, программа для 3D-моделирования), которые используют этот чертеж для визуализации, проверки или создания макета.
На практике в .NET: Для автоматической генерации OpenAPI-спецификации и Swagger UI в ASP.NET Core проектах используется пакет Swashbuckle.AspNetCore.
// Program.cs в ASP.NET Core
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
// Дополнительная конфигурация: JWT-авторизация, XML-комментарии и т.д.
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
// Middleware для обслуживания сгенерированного JSON-документа OpenAPI
app.UseSwagger();
// Middleware для обслуживания Swagger UI
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
}
После запуска приложения документация будет доступна по маршруту /swagger. Swashbuckle автоматически создаст OAS-файл на основе контроллеров, действий и атрибутов, а Swagger UI его отобразит.
Итог: Swagger — это реализация инструментов для работы со спецификацией OpenAPI, которая сама по себе является формальным описанием REST API, а не сетевым протоколом.