0Pricing
C# Academy · Aula

OpenAPI, versionamento e implantação

Gere documentação Swagger/OpenAPI, versione APIs e implante uma Minimal API no Azure App Service ou em contêineres.

OpenAPI, versionamento e implantação é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

OpenAPI nas APIs Minimalistas

OpenAPI (anteriormente Swagger) gera documentação interativa de APIs. No .NET 9, AddOpenApi() é integrado. Em versões anteriores, use Swashbuckle.AspNetCore.

Adicionando Swagger com Swashbuckle

Instale o Swashbuckle, configure-o nos serviços e adicione o componente intermediário para disponibilizar a especificação e a interface do Swagger.

// dotnet add package Swashbuckle.AspNetCore

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(opt =>
    opt.SwaggerDoc("v1", new() { Title = "Products API", Version = "v1" }));

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

Anotando Pontos de Acesso para OpenAPI

Use Produces, ProducesProblem, WithSummary e WithDescription para enriquecer a especificação OpenAPI gerada.

app.MapGet("/products/{id}", GetProduct)
   .WithName("GetProductById")
   .WithSummary("Get a product by ID")
   .WithDescription("Returns the product matching the given numeric ID.")
   .Produces<ProductDto>(200)
   .Produces<ProblemDetails>(404)
   .WithTags("Products");

Versionamento de API com Grupos de Rotas

Uma estratégia simples de versionamento usa grupos de rotas prefixados com a versão. Nenhum pacote adicional é necessário para o versionamento básico.

var v1 = app.MapGroup("/api/v1").WithTags("v1");
var v2 = app.MapGroup("/api/v2").WithTags("v2");

v1.MapGet("/products", GetProductsV1);
v2.MapGet("/products", GetProductsV2); // different DTO shape

// Clients use /api/v1/products or /api/v2/products

Asp.Versioning para Versionamento por Cabeçalho ou Consulta

O pacote Asp.Versioning.Http adiciona versionamento por cadeia de consulta, por cabeçalho e por segmento de URL às APIs Minimalistas, com integração completa com OpenAPI.

// dotnet add package Asp.Versioning.Http

builder.Services.AddApiVersioning(opt =>
{
    opt.DefaultApiVersion = new ApiVersion(1, 0);
    opt.AssumeDefaultVersionWhenUnspecified = true;
    opt.ApiVersionReader = new QueryStringApiVersionReader("api-version");
});

// /products?api-version=2.0
app.MapGet("/products", GetProducts)
   .HasApiVersion(2, 0);

Gerando uma Especificação Separada por Versão

Configure o Swashbuckle para gerar documentos OpenAPI separados para cada versão, para que os consumidores vejam apenas os pontos de acesso relevantes para sua versão.

builder.Services.AddSwaggerGen(opt =>
{
    opt.SwaggerDoc("v1", new() { Title = "API", Version = "v1" });
    opt.SwaggerDoc("v2", new() { Title = "API", Version = "v2" });
});

app.UseSwaggerUI(opt =>
{
    opt.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
    opt.SwaggerEndpoint("/swagger/v2/swagger.json", "v2");
});

Publicando um Binário Autossuficiente

Publique sua API Minimalista como um único binário autossuficiente — nenhum ambiente de execução do .NET é necessário na máquina de destino.

# Publish for Linux x64 as self-contained
dotnet publish -c Release -r linux-x64 --self-contained true

# Run the output binary
./bin/Release/net9.0/linux-x64/publish/MyApi

# Optionally single-file:
# dotnet publish -c Release -r linux-x64 -p:PublishSingleFile=true

Conteinerizando com Docker

Empacote a API em uma imagem Docker usando as imagens base oficiais do .NET. Um Dockerfile de vários estágios mantém a imagem final pequena.

# Dockerfile (multi-stage)
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApi.dll"]

# Build and run
# docker build -t my-api .
# docker run -p 8080:8080 my-api

Implantando no Azure App Service

Implante diretamente no Azure App Service a partir da CLI. O serviço gerencia o dimensionamento, os certificados e os domínios personalizados.

# Publish to folder first
dotnet publish -c Release -o ./publish

# Deploy to Azure App Service
az webapp up \
  --name my-products-api \
  --resource-group myRG \
  --runtime DOTNETCORE:9.0 \
  --sku B1

# View logs
az webapp log tail --name my-products-api --resource-group myRG

Verificações de Integridade

Adicione pontos de acesso de verificação de integridade para que os orquestradores (Kubernetes, Azure) possam verificar se sua API está ativa e pronta para receber tráfego.

builder.Services.AddHealthChecks()
    .AddDbContextCheck<AppDbContext>()
    .AddUrlGroup(new Uri("https://api.external.com/ping"), "external");

app.MapHealthChecks("/health");
app.MapHealthChecks("/health/ready", new HealthCheckOptions
{
    Predicate = hc => hc.Tags.Contains("ready")
});

Mundo Real: Lista de Verificação para Produção

Uma API Minimalista em produção deve incluir estas configurações para garantir correção, observabilidade e segurança.

// builder configuration
builder.Services.AddProblemDetails();
builder.Services.AddHealthChecks();
builder.Services.AddRateLimiter(...);
builder.Services.AddOutputCache();

// app pipeline
app.UseHttpsRedirection();
app.UseExceptionHandler();
app.UseRateLimiter();
app.UseOutputCache();
app.UseAuthentication();
app.UseAuthorization();

app.MapHealthChecks("/health");
// ... your endpoints
app.Run();

Verificação Rápida

Qual método torna os metadados dos pontos de acesso (Produces, WithSummary etc.) visíveis às ferramentas OpenAPI nas APIs Minimalistas?

Resumo: OpenAPI, Versionamento e Implantação

Principais conclusões:

  • AddEndpointsApiExplorer + Swashbuckle = Swagger UI para APIs Minimalistas
  • Anote com Produces, WithSummary e WithTags para obter uma documentação OpenAPI completa
  • Versionamento simples por meio de grupos de rotas; Asp.Versioning para cenários avançados
  • Publique de forma autossuficiente ou como imagem Docker para obter flexibilidade na implantação
  • Adicione verificações de integridade para sondas de prontidão do Kubernetes/Azure

Perguntas Frequentes

A aula “OpenAPI, versionamento e implantação” é grátis?

Sim — o texto completo de “OpenAPI, versionamento e implantação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “OpenAPI, versionamento e implantação”?

Gere documentação Swagger/OpenAPI, versione APIs e implante uma Minimal API no Azure App Service ou em contêineres. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “OpenAPI, versionamento e implantação”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando sua primeira Minimal API
  2. Grupos de rotas, parâmetros e validação
  3. Middleware e filtros em Minimal APIs
  4. OpenAPI, versionamento e implantação
← Voltar para C# Academy