Swagger - Aprimorando a documentação com anotações - II
Hoje veremos como incrementar a documentação do Swagger usando anotações na ASP .NET Core. |
Continuando a primeira parte do artigo veremos agora como gerar a documentação sem precisar gerar o arquivo XML.
|
Vamos criar um novo projeto Web API chamado DemoSeagger2 usando as mesmas configurações do artigo anterior.
Isso pode ser feito no Visual Studio 2022 ou usando o NET CLI com o VS Code através do comando :
dotnet new webapi -o DemoSwagger2
Usando anotações Swashbuckle
Vamos iniciar definindo a configuração habilitando as anotações sem incluir a referência ao arquivo xml.
Para poder realizar anotações vamos incluir em nosso projeto o pacote Swashbucle.AspNetCore.Annotations :
dotnet add package Swashbuckle.AspNetCore.Annotations
A seguir vamos habilitar no projeto o uso das anotações :
using Microsoft.OpenApi.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container.
builder.Services.AddControllers(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); |
Agora vamos fornecer alguma documentação para a nossa API alterando o código do endpoint GetWeatherForecast do controlador usando o atributo SwaggerOperation conforme abaixo:
[HttpGet(Name = "GetWeatherForecast")] [SwaggerOperation(Summary ="Obtém a lista da previsão de tempo ")] [ProducesResponseType(typeof(IEnumerable<WeatherForecast>),StatusCodes.Status200OK)] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } |
Além disso podemos fornecer informações ao cliente da PI como os possíveis códigos de status HTTP e seu corpo de resposta. Para isso vamos usar o atributo SwaggerResponse e definir, a título de exemplo que o endpoint da API pode retornar seus cinco códigos de status HTTP possíveis (200, 400, 409, 500 e 503).
[HttpGet(Name = "GetWeatherForecast")] [SwaggerOperation(Summary ="Obtém a lista da previsão de tempo ")] [SwaggerResponse(StatusCodes.Status200OK, Type = typeof(IEnumerable<WeatherForecast>))] [SwaggerResponse(StatusCodes.Status400BadRequest)] [SwaggerResponse(StatusCodes.Status409Conflict)] [SwaggerResponse(StatusCodes.Status500InternalServerError)] [SwaggerResponse(StatusCodes.Status503ServiceUnavailable)] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); }
|
A seguir vamos incluir uma documentação na classe WeatherForecast usada como modelo de domínio no projeto usando o atributo SwaggerSchema :
using Swashbuckle.AspNetCore.Annotations; namespace DemoSwagger2; public class WeatherForecast { [SwaggerSchema(Description = "Data e hora para a previsão")] public DateTime Date { get; set; }
[SwaggerSchema(Description = "Temperatura em Celsius")] [SwaggerSchema(Description = "Temperatura em Fahrenheit")] |
Podemos também definir os tipos de mídia de consumo e produção apropriados decorando o nosso controlador com os atributos [Consumes] e [Produces] definindo o valor application/json :
[ApiController] [Route("[controller]")] [Consumes("application/json")] [Produces("application/json")] public class WeatherForecastController : ControllerBase { ... } |
Agora vamos executar o nosso projeto e ver o resultado:
Temos assim uma forma bem simples de incluir documentação sem usar arquivos XML.
Pegue o projeto aqui: DemoSwagger2.zip (sem as referências)
"Meus
filhinhos, escrevo-lhes estas coisas para que vocês não pequem. Se, porém,
alguém pecar, temos um intercessor junto ao Pai, Jesus Cristo, o Justo."
1 João 2:1
Referências:
ASP .NET - Gerando QRCode com a API do Google
C# 9.0 - Instruções de nível superior
ASP.NET Core Web API - Apresentando API Analyzers
ASP.NET Core - Usando o token JWT com o Swagger
Gerando a documentação da Web API com Swagger