عنوان:

‫تازه‌های NET 10.: ارتقاء توصیف APIهای REST با پشتیبانی از YAML در OpenAPI


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۳/۱۱ ۰۸:۰۴
آدرس: www.dntips.ir
استاندارد OpenAPI به عنوان یک زبان توصیف واسط برنامه‌نویسی کاربردی (API) قدرتمند، نقشی حیاتی در طراحی، ساخت و مستندسازی API های RESTful ایفا می‌کند. گرچه نمایش مشخصات API در قالب JSON (JavaScript Object Notation) رایج‌تر است، OpenAPI از YAML (YAML Ain't Markup Language) نیز به عنوان فرمتی برای توصیف ساختار API ها پشتیبانی می‌کند. YAML به دلیل خوانایی بالاتر، به ویژه در هنگام تشریح ساختارهای پیچیده API، گزینه‌ای جذاب محسوب می‌شود و ابزارهای محبوبی چون Azure API Management نیز با هر دو فرمت JSON و YAML سازگاری کامل دارند. با انتشار .NET 10، توسعه‌دهندگان ASP.NET Core اکنون می‌توانند از این خوانایی بهبود یافته و انعطاف‌پذیری بیشتر در پروژه‌های خود بهره‌مند شوند.

درک عمیق‌تر OpenAPI و اهمیت YAML در توصیف API های ASP.NET Core
استاندارد OpenAPI (که پیشتر با نام Swagger شناخته می‌شد) به توسعه‌دهندگان اجازه می‌دهد تا API های REST خود را به شکلی استاندارد و مستقل از زبان برنامه‌نویسی توصیف کنند. این مشخصات (Specifications)، قراردادی قابل فهم برای انسان و ماشین ارائه می‌دهد که جزئیات نقاط پایانی (Endpoints)، عملیات قابل انجام (Operations)، پارامترهای ورودی و خروجی، مدل‌های داده و مکانیزم‌های احراز هویت را در بر می‌گیرد. وجود چنین استاندارد یکپارچه‌ای، همکاری بین تیم‌های مختلف، تولید خودکار مستندات، ساخت کلاینت‌های API و انجام تست‌ها را به مراتب ساده‌تر می‌کند.
پیش از این، پکیج Microsoft.AspNetCore.OpenApi در اکوسیستم .NET عمدتاً بر تولید مشخصات OpenAPI در فرمت JSON متمرکز بود. با این حال، YAML به دلیل ساختار دندانه‌گذاری شده و استفاده کمتر از کاراکترهای کنترلی (مانند آکولاد و ویرگول)، اغلب برای توصیف داده‌های ساختاریافته، خواناتر از JSON در نظر گرفته می‌شود. این ویژگی به خصوص در فایل‌های حجیم مشخصات API که جزئیات زیادی را در بر می‌گیرند، به توسعه‌دهندگان کمک می‌کند تا با سرعت و دقت بیشتری ساختار API را درک و بررسی کنند. با توجه به اینکه ابزارهای مهمی مانند Azure API Management به طور گسترده از YAML پشتیبانی می‌کنند، توانایی تولید مستقیم مشخصات YAML از درون برنامه‌های ASP.NET Core یک پیشرفت قابل توجه است.

پیکربندی پشتیبانی از YAML در مشخصات OpenAPI برنامه‌های ASP.NET Core با .NET 10
با معرفی .NET 10، پکیج Microsoft.AspNetCore.OpenApi به‌روزرسانی شده و اکنون قادر است مشخصات OpenAPI را علاوه بر JSON، در فرمت YAML نیز ارائه دهد. این قابلیت جدید به توسعه‌دهندگان ASP.NET Core، به ویژه آنهایی که از Minimal APIs استفاده می‌کنند، امکان می‌دهد تا به سادگی یک نقطه پایانی (Endpoint) جدید برای ارائه مشخصات API خود در قالب YAML تعریف کنند.
برای فعال‌سازی این ویژگی در یک پروژه ASP.NET Core 10 (یا نسخه‌های جدیدتر)، ابتدا لازم است که فایل پروژه (.csproj) برای استفاده از چارچوب هدف (Target Framework) مناسب و نسخه پیش‌نمایش (Preview) پکیج Microsoft.AspNetCore.OpenApi پیکربندی شود.

نمونه محتوای فایل .csproj برای یک برنامه آزمایشی با .NET 10 و Minimal APIs:
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0-preview.4.25258.110" />
  </ItemGroup>

</Project>
این فایل، بر روی net10.0 تنظیم شده است که نشان‌دهنده استفاده از جدیدترین نسخه پلتفرم .NET (در زمان ارائه این ویژگی) می‌باشد. همچنین، PackageReference مربوط به Microsoft.AspNetCore.OpenApi به نسخه 10.0.0-preview.4.25258.110 (یا نسخه‌های سازگار بعدی) اشاره دارد که قابلیت تولید YAML را در خود جای داده است.

پیاده‌سازی API REST و فعال‌سازی Endpoint برای مشخصات OpenAPI با فرمت YAML
پس از پیکربندی صحیح فایل پروژه، گام بعدی پیاده‌سازی API و فعال‌سازی قابلیت ارائه مشخصات OpenAPI در هر دو فرمت JSON و YAML است. این کار در فایل Program.cs (در پروژه‌های Minimal API) یا در کلاس Startup.cs (در پروژه‌های سنتی‌تر ASP.NET Core MVC) انجام می‌شود.

نمونه کد پیاده‌سازی یک API REST ساده و نمایش مشخصات آن در فرمت YAML:
using System.Text.Json;

var builder = WebApplication.CreateBuilder(args);

// فعال‌سازی سرویس‌های OpenAPI
builder.Services.AddOpenApi();

var app = builder.Build();

// فعال‌سازی Middleware های OpenAPI در محیط توسعه
if (app.Environment.IsDevelopment())
{
    app.MapOpenApi(); // فعال‌سازی Endpoint پیش‌فرض JSON (معمولاً /openapi/v1.json)
    app.MapOpenApi("/openapi/{documentName}.yaml"); // فعال‌سازی Endpoint برای فرمت YAML
}

// تعریف یک Endpoint ساده برای نمونه
app.MapGet("/saudacao", () =>
{
    var currentDate = DateTime.Now;
    string mensagem = (currentDate.DayOfWeek == DayOfWeek.Saturday ||
        currentDate.DayOfWeek == DayOfWeek.Sunday) ? "Bom final de semana!" : "Seguimos na luta!";
    var saudacao = new Saudacao(currentDate, mensagem);
    return Results.Ok(saudacao);
});

app.Run();

// تعریف یک Record برای داده پاسخ (برای سادگی)
public record Saudacao(DateTime DataHora, string Mensagem);
در کد فوق، نکات کلیدی زیر قابل توجه هستند:
  • builder.Services.AddOpenApi(); (خط ۵): این متد، سرویس‌های لازم برای تولید و ارائه مشخصات OpenAPI را در برنامه ثبت می‌کند. این اولین گام برای فعال‌سازی پشتیبانی از OpenAPI است.
  • app.MapOpenApi(); (خط ۱۱، در صورت فعال بودن): این دستور، یک Endpoint پیش‌فرض برای ارائه مشخصات OpenAPI در فرمت JSON ایجاد می‌کند. مسیر این Endpoint معمولاً چیزی شبیه به /openapi/v1.json خواهد بود، که v1 نام سند (Document Name) پیش‌فرض است.
  • app.MapOpenApi("/openapi/{documentName}.yaml"); (خط ۱۲): این دستور کلیدی، Endpoint جدیدی را برای ارائه مشخصات OpenAPI در فرمت YAML فعال می‌کند. با استفاده از این مسیر، که شامل پارامتر documentName (نام سند) است، می‌توان به مشخصات API با پسوند .yaml دسترسی پیدا کرد. به عنوان مثال، اگر نام سند v1 باشد، مسیر دسترسی به فایل YAML، /openapi/v1.yaml خواهد بود.

با اجرای این برنامه و مراجعه به مسیر /openapi/v1.yaml (با فرض نام سند v1) در مرورگر یا ابزارهای تست API، می‌توانید مشخصات API خود را در فرمت YAML مشاهده کنید. این قابلیت به خصوص برای توسعه‌دهندگانی که از ابزارها یا پلتفرم‌هایی استفاده می‌کنند که YAML را ترجیح می‌دهند یا برای بهبود خوانایی مستندات API، بسیار مفید خواهد بود.

مزایای پشتیبانی از YAML در OpenAPI برای توسعه‌دهندگان .NET
افزوده شدن پشتیبانی از YAML به پکیج Microsoft.AspNetCore.OpenApi در .NET 10، مزایای متعددی را برای توسعه‌دهندگان .NET به همراه دارد:
  • خوانایی بهتر مشخصات APIها: YAML با ساختار ساده و تاکید بر دندانه‌گذاری، درک فایل‌های بزرگ و پیچیده مشخصات API را آسان‌تر می‌کند.
  • سازگاری گسترده‌تر: امکان ارائه مشخصات API در هر دو فرمت JSON و YAML، سازگاری با طیف وسیع‌تری از ابزارها و پلتفرم‌های مدیریت API (مانند Azure API Management) را فراهم می‌کند.
  • تسهیل همکاری: تیم‌هایی که YAML را برای مستندسازی یا پیکربندی ترجیح می‌دهند، اکنون می‌توانند به طور مستقیم از خروجی YAML برنامه‌های ASP.NET Core خود استفاده کنند.
  • انعطاف‌پذیری بیشتر: توسعه‌دهندگان اکنون می‌توانند بر اساس نیاز پروژه یا ترجیحات تیم، فرمت مناسب برای ارائه مشخصات API خود را انتخاب کنند.


آزمون دانش
کدام متد در ASP.NET Core .NET 10 برای فعال‌سازی Endpoint مشخصات OpenAPI در فرمت YAML به کار می‌رود؟
الف)builder.Services.AddSwaggerGen();
ب)app.UseYamlOpenApi();
ج)app.MapOpenApi("/openapi/{documentName}.yaml");
د)app.EnableYamlSupport();


نتیجه‌گیری: آینده روشن‌تر برای مستندسازی API در ASP.NET Core
پشتیبانی از YAML در کنار JSON برای مشخصات OpenAPI در .NET 10، یک گام مهم در جهت افزایش انعطاف‌پذیری و بهبود تجربه توسعه‌دهندگان ASP.NET Core است. این قابلیت، با فراهم آوردن گزینه‌ای خواناتر برای توصیف API ها، نه تنها فرآیند توسعه و نگهداری API های REST را ساده‌تر می‌کند، بلکه سازگاری با اکوسیستم گسترده‌تری از ابزارها و خدمات مبتنی بر OpenAPI را نیز تضمین می‌نماید. توسعه‌دهندگان دات‌نت می‌توانند با بهره‌گیری از این ویژگی جدید، API هایی با مستندات دقیق‌تر، خواناتر و قابل فهم‌تر برای همکاران و مصرف‌کنندگان API های خود ایجاد کنند.


پاسخ آزمون
گزینه صحیح ج) app.MapOpenApi("/openapi/{documentName}.yaml"); می‌باشد.


مشاهده مطلب اصلی