Módulo 4 · APIs e sua Arquitetura — Capítulo 05

Documentação com Swagger/OpenAPI

Documentação que se mantém sincronizada com o código automaticamente — e uma interface para testar a API direto do navegador.

1. OpenAPI vs. Swagger — os nomes que causam confusão

OpenAPI é a especificação — um formato JSON/YAML padronizado que descreve todos os endpoints de uma API: rotas, parâmetros, formatos de request/response, códigos de status possíveis. Swagger é o conjunto de ferramentas (originalmente de onde a especificação nasceu) que lê esse documento e gera uma interface visual navegável. Na prática, o ASP.NET Core gera o documento OpenAPI automaticamente a partir do seu código.

2. Habilitando no projeto

C# Program.cs
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(opcoes =>
{
    opcoes.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "API de Pedidos",
        Version = "v1",
        Description = "API do sistema de pedidos construído sobre o Módulo 2"
    });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(); // interface visual em /swagger
}
Dica

Restringir UseSwaggerUI() a IsDevelopment() é uma boa prática comum — expor a documentação completa da API (incluindo endpoints internos) publicamente em produção pode dar a um atacante um mapa completo da sua superfície de ataque.

3. Enriquecendo a documentação gerada

Sem nenhuma anotação extra, o Swagger já descobre rotas, verbos e tipos a partir da assinatura dos seus métodos. Atributos e comentários XML deixam a documentação mais completa:

C# documentação enriquecida
/// <summary>
/// Busca um cliente pelo Id.
/// </summary>
/// <param name="id">Identificador único do cliente</param>
/// <response code="200">Cliente encontrado</response>
/// <response code="404">Cliente não existe</response>
[HttpGet("{id:int}")]
[ProducesResponseType(typeof(ClienteDto), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult<ClienteDto>> ObterPorId(int id) { ... }

Para os comentários /// aparecerem no Swagger, é preciso habilitar a geração do arquivo XML de documentação no .csproj:

XML MinhaApi.csproj
<PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

4. Documentando autenticação JWT no Swagger

Para testar endpoints protegidos (capítulo anterior) direto na interface do Swagger, é preciso ensiná-lo sobre o esquema de autenticação:

C# Swagger + JWT
builder.Services.AddSwaggerGen(opcoes =>
{
    opcoes.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Name = "Authorization",
        Type = SecuritySchemeType.Http,
        Scheme = "Bearer",
        BearerFormat = "JWT",
        In = ParameterLocation.Header,
        Description = "Informe: Bearer {seu token}"
    });

    opcoes.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }
            },
            Array.Empty<string>()
        }
    });
});

Com isso, a interface do Swagger ganha um botão "Authorize" onde você cola o token — e ele passa a ser enviado automaticamente em toda chamada de teste feita pela interface.

5. Onde isso te leva

Com a API documentada e testável, o próximo capítulo cobre o que acontece quando algo dá errado de forma inesperada — tratamento global de exceções, para que nenhum erro não tratado vaze detalhes internos (stack trace, string de conexão) para quem consome a API.

📌 Resumo do capítulo

  • OpenAPI é a especificação; Swagger é a ferramenta que gera interface visual a partir dela.
  • O ASP.NET Core gera o documento OpenAPI automaticamente a partir das assinaturas dos endpoints.
  • Comentários XML (///) e atributos [ProducesResponseType] enriquecem a documentação gerada.
  • Restrinja a interface do Swagger a ambientes de desenvolvimento — evite expor o mapa completo da API em produção.
  • Configure AddSecurityDefinition para testar endpoints protegidos por JWT direto na interface.

✏️ Praticando

  1. Habilite Swagger no projeto da API de clientes e navegue pela interface gerada em /swagger.
  2. Adicione comentários XML e [ProducesResponseType] em pelo menos dois endpoints.
  3. Configure a autenticação JWT no Swagger e teste um endpoint protegido direto pela interface.