Swagger - gro1vy/DeliverServiceAPI GitHub Wiki

Что такое Swagger?

Swagger — это набор инструментов, который позволяет автоматически описывать API на основе его кода. Документация, автоматически созданная через Swagger, облегчает понимание API для компьютеров и людей.

На основе кода или набора правил Swagger автоматически генерирует документацию в формате JSON-файла. Ее можно встроить на страницу сайта или в приложение, чтобы пользователи могли интерактивно знакомиться с документацией, можно отправлять клиентам — сгенерировать такое описание намного быстрее, чем написать с нуля.

image

Для чего нужен Swagger?

Основное назначение Swagger это быстрая и лёгкая автоматическая генерация документация, которую к тому же можно дописывать самостоятельно. Соответсвенно такая документация позволяет пользователям нашего API быстро понять, как с ним работать.

Также Swagger используется разработчиками самого API для проверки правильности работы методов.

Генерация документации из кода

Swagger «читает» код API и на его основе генерирует документацию, и хоть swagger и укажет контроллеры, его методы, что эти методы могут вернуть (тип, возвращаемый методом) и как к ним обратиться, но без дополнительного описания от разработчика API, документация будет не до конца подробной. И в asp.net есть несколько способов добавления этого дополнительного описания.

C помощью атрибута ProducesResponseType

Первый способ с помощью атрибута ProducesResponseType, который показывает, какой код может вернуть метод помимо кода 200 и какую модель с этим кодом пришлет.

image

Вот несколько примером:

  • [ProducesResponseType(StatusCodes.Status400BadRequest)] - указывает, что метод может вернуть код 400, а так как возвращаемая модель не указана, то в зависимости от кода Swagger либо покажет стандартную модель, либо ничего не укажет
  • [ProducesResponseType(typeof(ResponseDTO), StatusCodes.Status400BadRequest)] - указывает, что метод может вернуть код 400, с которым придет модель ResponseDTO

С помощью XML Comments

С помощью второго способа можно задавать возвращаемые код и их описание, однако без указания возвращаемой модели, а также давать описание для метода.

Для того, чтобы воспользоваться данным способом нужно настроить проект и немного модифицировать Swagger.

Итак в конфигурацию проекта нужно добавить следующие строки, чтобы Swagger смод получить доступ к XML Comments у методов:

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

После в Program.cs в добавить для модификации Swagger:

builder.Services.AddSwaggerGen(options =>
{
    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    options.IncludeXmlComments(xmlPath);
});

Теперь, когда проект настроен, можно у методов XML Comments и они будут отображаться в Swagger.

Добавим для метода описание:

/// <summary>
/// Get user profile
/// </summary>
/// <remarks>
/// Any text
/// </remarks>
/// <response code="401">Unauthorized</response>
[HttpPut("profile")]
public async Task<ActionResult> EditUserInfo([FromBody] UserEditRequestDTO model)
{
  // Code
}

Тогда получим такое описание:

image

Итак в теге

пишется краткая информация о функции, а в более подробная, эти теги должны быть в единичном экземпляре. В тегах пишется код и краткое описание, соответственно один код можно указывать только один раз.
⚠️ **GitHub.com Fallback** ⚠️