C# Academy · บทเรียน

OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน

สร้างเอกสาร Swagger/OpenAPI กำหนดเวอร์ชัน API และนำ Minimal API ไปใช้งานบน Azure App Service หรือคอนเทนเนอร์

บทเรียน 4 จาก 413 ขั้นตอน

OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

OpenAPI ใน API แบบมินิมอล

OpenAPI (เดิมชื่อ Swagger) ใช้สร้างเอกสาร API แบบโต้ตอบได้ ใน .NET 9 มี AddOpenApi() ให้ใช้งานในตัว ส่วนเวอร์ชันก่อนหน้านี้ให้ใช้ Swashbuckle.AspNetCore

การเพิ่ม Swagger ด้วย Swashbuckle

ติดตั้ง Swashbuckle กำหนดค่าในบริการ และเพิ่มมิดเดิลแวร์เพื่อให้บริการข้อกำหนดและส่วนติดต่อผู้ใช้ 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();
}

การใส่คำอธิบายจุดปลายทางสำหรับ OpenAPI

ใช้ Produces, ProducesProblem, WithSummary และ WithDescription เพื่อเพิ่มรายละเอียดให้ข้อกำหนด 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");

การกำหนดเวอร์ชัน API ด้วยกลุ่มเส้นทาง

กลยุทธ์การกำหนดเวอร์ชันแบบง่ายใช้กลุ่มเส้นทางที่มีเวอร์ชันเป็นคำนำหน้า โดยไม่ต้องติดตั้งแพ็กเกจเพิ่มเติมสำหรับการกำหนดเวอร์ชันพื้นฐาน

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 สำหรับการกำหนดเวอร์ชันผ่านส่วนหัวหรือคำค้น

แพ็กเกจ Asp.Versioning.Http เพิ่มการกำหนดเวอร์ชันผ่านคำค้น ส่วนหัว และส่วนของ URL ให้กับ API แบบมินิมอล พร้อมการผสานรวมกับ 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);

การสร้างข้อกำหนดแยกตามเวอร์ชัน

กำหนดค่า Swashbuckle ให้สร้างเอกสาร OpenAPI แยกสำหรับแต่ละเวอร์ชัน เพื่อให้ผู้ใช้บริการเห็นเฉพาะจุดปลายทางที่เกี่ยวข้องกับเวอร์ชันของตน

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

การเผยแพร่ไบนารีแบบในตัว

เผยแพร่ API แบบมินิมอลเป็นไบนารีเดียวที่รวมส่วนประกอบที่จำเป็นทั้งหมด โดยไม่ต้องติดตั้งรันไทม์ .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

การสร้างคอนเทนเนอร์ด้วย Docker

บรรจุ API ลงในอิมเมจ Docker โดยใช้อิมเมจพื้นฐาน .NET อย่างเป็นทางการ Dockerfile แบบหลายระยะช่วยให้ขนาดอิมเมจสุดท้ายเล็กลง

# 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

การนำไปใช้งานบน Azure App Service

นำไปใช้งานบน Azure App Service ได้โดยตรงจาก CLI บริการจะจัดการการปรับขนาด ใบรับรอง และโดเมนแบบกำหนดเองให้

# 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

การตรวจสอบสถานะ

เพิ่มจุดปลายทางสำหรับตรวจสอบสถานะ เพื่อให้ระบบจัดการคอนเทนเนอร์ เช่น Kubernetes และ Azure ตรวจสอบได้ว่า API ยังทำงานอยู่และพร้อมรับการรับส่งข้อมูล

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

ตัวอย่างจากโลกจริง: รายการตรวจสอบสำหรับใช้งานจริง

API แบบมินิมอลสำหรับใช้งานจริงควรมีการตั้งค่าเหล่านี้ เพื่อความถูกต้อง การสังเกตการณ์ และความปลอดภัย

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

ตรวจสอบความเข้าใจ

เมธอดใดทำให้เมทาดาทาของจุดปลายทาง (Produces, WithSummary และอื่น ๆ) มองเห็นได้สำหรับเครื่องมือ OpenAPI ใน API แบบมินิมอล

สรุป: OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน

ประเด็นสำคัญ:

  • AddEndpointsApiExplorer + Swashbuckle = Swagger UI สำหรับ API แบบมินิมอล
  • ใส่คำอธิบายด้วย Produces, WithSummary และ WithTags เพื่อสร้างเอกสาร OpenAPI ที่มีรายละเอียดครบถ้วน
  • กำหนดเวอร์ชันแบบง่ายผ่านกลุ่มเส้นทาง และใช้ Asp.Versioning สำหรับกรณีที่ซับซ้อน
  • เผยแพร่แบบรวมส่วนประกอบในตัวหรือเป็นอิมเมจ Docker เพื่อความยืดหยุ่นในการนำไปใช้งาน
  • เพิ่มการตรวจสอบสถานะสำหรับโพรบตรวจสอบความพร้อมของ Kubernetes และ Azure
เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

คำถามที่พบบ่อย

บทเรียน “OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน”

สร้างเอกสาร Swagger/OpenAPI กำหนดเวอร์ชัน API และนำ Minimal API ไปใช้งานบน Azure App Service หรือคอนเทนเนอร์ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้าง Minimal API แรกของคุณ
  2. กลุ่มเส้นทาง พารามิเตอร์ และการตรวจสอบ
  3. มิดเดิลแวร์และตัวกรองใน Minimal APIs
  4. OpenAPI การกำหนดเวอร์ชัน และการนำไปใช้งาน
← กลับไปที่ C# Academy