C# Academy · Lekcja

OpenAPI, wersjonowanie i wdrażanie

Generuj dokumentację Swagger/OpenAPI, wersjonuj interfejsy API i wdrażaj Minimal API w Azure App Service lub kontenerach.

Lekcja 4 z 413 kroki

OpenAPI, wersjonowanie i wdrażanie to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

OpenAPI w Minimal APIs

OpenAPI (dawniej Swagger) generuje interaktywną dokumentację interfejsu API. W .NET 9 dostępne jest wbudowane AddOpenApi(). We wcześniejszych wersjach należy użyć Swashbuckle.AspNetCore.

Dodawanie Swaggera za pomocą Swashbuckle

Należy zainstalować Swashbuckle, skonfigurować go w usługach i dodać middleware udostępniające specyfikację oraz interfejs Swagger UI.

// 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();
}

Adnotowanie endpointów na potrzeby OpenAPI

Należy użyć Produces, ProducesProblem, WithSummary i WithDescription, aby wzbogacić wygenerowaną specyfikację OpenAPI.

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");

Wersjonowanie API za pomocą grup tras

Prosta strategia wersjonowania polega na użyciu grup tras z prefiksem zawierającym wersję. Do podstawowego wersjonowania nie jest potrzebny dodatkowy pakiet.

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 do wersjonowania za pomocą nagłówka lub zapytania

Pakiet Asp.Versioning.Http dodaje do Minimal APIs wersjonowanie za pomocą parametrów zapytania, nagłówków i segmentów adresu URL, a także pełną integrację z 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);

Generowanie oddzielnej specyfikacji dla każdej wersji

Należy skonfigurować Swashbuckle tak, aby generował oddzielne dokumenty OpenAPI dla każdej wersji, dzięki czemu odbiorcy zobaczą tylko endpointy odpowiednie dla swojej wersji.

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");
});

Publikowanie samodzielnego pliku binarnego

Minimal API należy opublikować jako samodzielny, pojedynczy plik binarny — na komputerze docelowym nie będzie potrzebne środowisko uruchomieniowe .NET.

# 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

Konteneryzacja za pomocą Dockera

Interfejs API należy spakować w obraz Docker przy użyciu oficjalnych obrazów bazowych .NET. Wieloetapowy plik Dockerfile pozwala zachować niewielki rozmiar końcowego obrazu.

# 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

Wdrażanie w Azure App Service

Interfejs API można wdrożyć bezpośrednio w Azure App Service za pomocą interfejsu wiersza poleceń. Usługa obsługuje skalowanie, certyfikaty i domeny niestandardowe.

# 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

Kontrole stanu

Należy dodać endpointy kontroli stanu, aby orkiestratory (Kubernetes, Azure) mogły sprawdzać, czy interfejs API działa i jest gotowy do obsługi ruchu.

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")
});

Praktyczny przykład: lista kontrolna wdrożenia produkcyjnego

Produkcyjne Minimal API powinno zawierać poniższe ustawienia zapewniające poprawność działania, obserwowalność i bezpieczeństwo.

// 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();

Szybkie sprawdzenie

Za pomocą której metody metadane endpointów (Produces, WithSummary itd.) stają się widoczne dla narzędzi OpenAPI w Minimal APIs?

Podsumowanie: OpenAPI, wersjonowanie i wdrażanie

Najważniejsze informacje:

  • AddEndpointsApiExplorer + Swashbuckle = Swagger UI dla Minimal APIs
  • Adnotacje Produces, WithSummary i WithTags zapewniają bogatą dokumentację OpenAPI
  • Proste wersjonowanie za pomocą grup tras; Asp.Versioning do bardziej zaawansowanych scenariuszy
  • Samodzielna publikacja lub obraz Docker zapewnia elastyczne wdrażanie
  • Należy dodać kontrole stanu na potrzeby sond gotowości Kubernetes/Azure
Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „OpenAPI, wersjonowanie i wdrażanie” jest bezpłatna?

Tak — pełny tekst „OpenAPI, wersjonowanie i wdrażanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „OpenAPI, wersjonowanie i wdrażanie”?

Generuj dokumentację Swagger/OpenAPI, wersjonuj interfejsy API i wdrażaj Minimal API w Azure App Service lub kontenerach. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „OpenAPI, wersjonowanie i wdrażanie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie pierwszego Minimal API
  2. Grupy tras, parametry i walidacja
  3. Middleware i filtry w Minimal APIs
  4. OpenAPI, wersjonowanie i wdrażanie
← Powrót do C# Academy