Documentação do Swagger com bibliotecas externas

· 3 min de leitura

Usar várias bibliotecas para dividir seu código para casos futuros é uma coisa boa. Pessoalmente adoro fazer isso, se consigo dividir minha lógica para que ela possa ser reutilizada em outros projetos ou partes dos projetos.

Para mim, pelo menos, é obrigatório dividir os modelos de dados, o que inclui o Entity Framework, para que possa ser referenciado e usado em um Console application, um Blazor application ou um API.

Vamos dar uma olhada em um exemplo de como faço as coisas, este é um screenshot de um projeto que possui alguns aplicativos e uma biblioteca compartilhada que possui todos os modelos.

Este é um exemplo de classe que movi do projeto API com documentação com summary em cada propriedade e classe.

namespace CustomLibrariesDocumentation.Models
{
    /// <summary>
    /// WeatherForecast class
    /// </summary>
    public class WeatherForecast
    {
        /// <summary>
        /// Gets or sets the Date
        /// </summary>
        public DateOnly Date { get; set; }

        /// <summary>
        /// Gets or sets the TemperatureC
        /// </summary>
        public int TemperatureC { get; set; }

        /// <summary>
        /// Gets or sets the TemperatureF
        /// </summary>
        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

        /// <summary>
        /// Gets or sets the Summary
        /// </summary>
        public string? Summary { get; set; }
    }
}

Se fizermos referência ao Console application e começarmos a usar o modelo, podemos ver a documentação, que é um recurso padrão no Visual Studio, então funciona bem, como você pode ver aqui:

Mas então, se fizermos referência ao API e formos para Swagger, não haverá documentação resumida.

Como podemos consertar isso?

Primeiro, temos que habilitar os comentários XML na biblioteca, para fazer isso, é necessário atualizar as configurações do projeto e habilitar ``:

Isso irá gerar alguns arquivos na pasta build que terminam com a extensão de arquivo xml, como você pode ver aqui:

Agora que fizemos isso, temos que adicionar algumas coisas no Program.cs, para podermos ler esses arquivos, isso porque por padrão ele carrega apenas a definição XML do projeto em que está.

Ele usa um método que temos dentro do AddSwaggerGen que se chama IncludeXmlComments.

A ideia é que se tivermos todos os arquivos xml, forçaremos o carregamento deles no Swagger.

builder.Services.AddSwaggerGen(s =>
{
    // Comments
    var allXmlFiles = Directory.GetFiles(AppContext.BaseDirectory, "*.xml");

    foreach (string xmlFiles in allXmlFiles)
    {
        s.IncludeXmlComments(xmlFiles);
    }
});

É direto, pegamos os arquivos xml do diretório de construção e os adicionamos com o método IncludeXmlComments.

Agora carregamos novamente o API e verificamos se conseguimos ver a documentação.

E você pode ver que podemos ver a documentação!

Espero que tenha ajudado você, qualquer dúvida não hesite em entrar em contato comigo!