OpenAPI وإصدار الواجهات والنشر
ولّدوا وثائق Swagger/OpenAPI، وأصدروا نسخًا متعددة من APIs، وانشروا Minimal API على Azure App Service أو في حاويات.
OpenAPI وإصدار الواجهات والنشر درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
OpenAPI في Minimal APIs
ينشئ OpenAPI (المعروف سابقًا باسم Swagger) توثيقًا تفاعليًا لـ API. في .NET 9، تكون AddOpenApi() مضمّنة. أما في الإصدارات الأقدم، فاستخدم Swashbuckle.AspNetCore.
إضافة Swagger باستخدام Swashbuckle
ثبّت Swashbuckle، واضبطه في الخدمات، ثم أضف الوسيط لتقديم المواصفات وواجهة 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();
}إضافة تعليقات توضيحية إلى نقاط النهاية في 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/productsAsp.Versioning لإدارة الإصدارات عبر الترويسة أو الاستعلام
تضيف الحزمة Asp.Versioning.Http إدارة الإصدارات عبر سلسلة الاستعلام والترويسة ومقطع URL إلى Minimal APIs، مع تكامل كامل مع 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");
});نشر ملف ثنائي مستقل بذاته
انشر Minimal 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")
});من الواقع العملي: قائمة تحقق للإنتاج
ينبغي أن تتضمن Minimal 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 في Minimal APIs؟
مراجعة: OpenAPI وإدارة الإصدارات والنشر
أهم النقاط:
- AddEndpointsApiExplorer + Swashbuckle = واجهة Swagger UI لـ Minimal APIs
- أضف تعليقات توضيحية باستخدام Produces وWithSummary وWithTags لإنشاء مستندات OpenAPI غنية
- إدارة بسيطة للإصدارات عبر مجموعات المسارات؛ وAsp.Versioning للسيناريوهات المتقدمة
- انشر ملفًا مستقلًا بذاته أو صورة Docker لمرونة أكبر في النشر
- أضف فحوصات الصحة لفحوصات الجاهزية في Kubernetes وAzure
الأسئلة الشائعة
هل درس «OpenAPI وإصدار الواجهات والنشر» مجاني؟
نعم — نص درس «OpenAPI وإصدار الواجهات والنشر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «OpenAPI وإصدار الواجهات والنشر»؟
ولّدوا وثائق Swagger/OpenAPI، وأصدروا نسخًا متعددة من APIs، وانشروا Minimal API على Azure App Service أو في حاويات. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «OpenAPI وإصدار الواجهات والنشر»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء أول Minimal API لكم
- مجموعات المسارات والمعلمات والتحقق
- Middleware وFilters في Minimal APIs
- OpenAPI وإصدار الواجهات والنشر