۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

یک دروازه API با استفاده از YARP در ASP.NET Core بسازید

از یک دروازه API برای ارائه یک نقطه ورود به خدمات پشتیبان خود و حفظ امنیت خدمات خود استفاده کنید. YARP این کار را آسان می کند.

از یک دروازه API برای ارائه یک نقطه ورود به خدمات پشتیبان خود و حفظ امنیت خدمات خود استفاده کنید. YARP این کار را آسان می کند.

یک دروازه API مکانیزمی را فراهم می‌کند که از طریق آن اجزای رابط کاربری یک برنامه کاربردی می‌توانند برای تبادل داده به سرویس‌های پشتیبان متصل شوند. این مقاله مفهوم دروازه API را معرفی می‌کند، تفاوت‌های بین یک دروازه API و یک پروکسی معکوس را مورد بحث قرار می‌دهد، و نشان می‌دهد که چگونه می‌توانید یک دروازه API را با استفاده از YARP (یک پروکسی معکوس دیگر) در هسته ASP.NET.

در این مقاله، از سرویس‌های میکرو که در مقاله قبلی من ایجاد کردیم استفاده خواهیم کرد. برای استفاده از نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

درگاه API چیست؟

یک دروازه API یک نقطه ورود واحد را برای مشتریان یا مصرف کنندگان خدمات فراهم می کند تا به خدمات پشتیبان دسترسی داشته باشند. یک دروازه API تماس‌های برنامه‌های مشتری را می‌پذیرد و آنها را به سرویس‌های مناسب ارسال می‌کند. به عنوان یک نقطه مرکزی کنترل بین مشتریان و سرویس‌ها، یک دروازه API می‌تواند برای پیاده‌سازی محدودیت نرخ، امنیت، تعادل بار، مسیریابی و نظارت استفاده شود. همچنین به تقویت اتصال شل، امنیت، مقیاس پذیری و در دسترس بودن بالا کمک می کند.

یک دروازه API نوع خاصی از پروکسی معکوس است. پروکسی معکوس سروری است که بین سرویس گیرندگان و سرویس‌های بک‌اند قرار می‌گیرد تا درخواست‌های کلاینت را در چندین ماشین توزیع کند. یک پروکسی معکوس انتخاب خوبی برای ذخیره سازی، امنیت و تعادل بار است. مشتریان می‌توانند خدمات پایین‌دستی را فقط از طریق پراکسی معکوس، که درخواست‌ها را به سرویس پایین‌دستی مناسب ارسال می‌کند، فراخوانی کنند.

Bjarne Stroustrup خالق C++ از ایمنی آن دفاع می کند

در بخش‌های بعدی نحوه پیاده‌سازی یک دروازه API با استفاده از YARP در ASP.NET Core را بررسی خواهیم کرد.

یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنیم. مراحل ذکر شده در زیر را دنبال کنید.

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، کادر «استفاده از کنترل‌کننده‌ها (برای استفاده از حداقل API‌ها علامت آن را بردارید» علامت بزنید. ما از حداقل API در این پروژه استفاده نخواهیم کرد.
  9. در جای دیگری از پنجره «اطلاعات اضافی»، «نوع احراز هویت» را روی «هیچ‌کدام» (پیش‌فرض) بگذارید و مطمئن شوید که کادرهای «فعال کردن پشتیبانی باز API»، «پیکربندی برای HTTPS» و «فعال کردن داکر» را انتخاب کنید. ” بدون علامت باقی می ماند. ما از هیچ یک از این ویژگی ها در اینجا استفاده نخواهیم کرد.
  10. روی ایجاد کلیک کنید.

ما از این پروژه ASP.NET Core Web API برای پیاده‌سازی یک دروازه API با YARP در بخش‌های زیر استفاده خواهیم کرد. به طور خاص، ما یک برنامه کاربردی مبتنی بر میکروسرویس ایجاد خواهیم کرد که شامل یک دروازه API و سه سرویس پایین دست است.

4 چک کننده نوع پایتون برای تمیز نگه داشتن کد شما

بسته YARP NuGet را نصب کنید

در مرحله بعد بسته YARP NuGet را به پروژه Web API که در ویژوال استودیو ایجاد کردید اضافه کنید. برای انجام این کار، پروژه را در پنجره Solution Explorer انتخاب کنید و کلیک راست کرده و “Manage NuGet Packages” را انتخاب کنید. در پنجره NuGet Package Manager، بسته Yarp.ReverseProxy را جستجو کرده و آن را نصب کنید.

از طرف دیگر، می‌توانید بسته YARP را از طریق کنسول NuGet Package Manager با وارد کردن خط نشان داده شده در زیر نصب کنید.

PM> Install-Package Yarp.ReverseProxy

YARP را در ASP.NET Core پیکربندی کنید

با فرض اینکه بسته Yarp.ReverseProxy NuGet با موفقیت در پروژه شما نصب شده است، اکنون باید YARP را در فایل Program.cs پروژه ASP.NET Core خود پیکربندی کنید. می توانید YARP را با استفاده از کد زیر پیکربندی کنید.

var builder = WebApplication.CreateBuilder(args);
builder.Services
   .AddReverseProxy()
   .LoadFromConfig(builder.Configuration.GetSection("Yarp"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();

روش AddReverseProxy برای افزودن سرویس های مورد نیاز برای کارکرد YARP استفاده می شود. روش LoadFromConfig نقاط پایانی و اطلاعات مسیریابی آنها را از فایل پیکربندی بارگیری می کند. در نهایت، روش MapReverseProxy مسیرهای پراکسی معکوس را به جدول مسیریابی اضافه می کند.

اطلاعات مسیر را در YARP مشخص کنید

YARP از مسیرها و خوشه‌ها برای تعیین پیکربندی مسیر استفاده می‌کند. در حالی که مسیرها برای مشخص کردن الگوهای درخواست استفاده می‌شوند، از خوشه‌ها برای تعیین سرویس‌هایی که درخواست‌ها باید در آن جا ارسال شوند، استفاده می‌شود.

در زیر کد منبع کامل پیکربندی است که در این مثال استفاده خواهیم کرد. همانطور که می بینید، سه مسیر وجود دارد: مسیر مشتریان، مسیر تامین کنندگان و مسیر محصولات.

"Yarp": {
   "Routes": {
      "customers-route": {
         "ClusterId": "customers-cluster",
         "Match": {
            "Path": "/customers/{**catch-all}"
         },
         "Transforms": [ { "PathPattern": "{**catch-all}" } ]
      },
      "suppliers-route": {
         "ClusterId": "suppliers-cluster",
         "Match": {
            "Path": "/suppliers/{**catch-all}"
         },
         "Transforms": [ { "PathPattern": "{**catch-all}" } ]
      },
      "products-route": {
         "ClusterId": "products-cluster",
         "Match": {
            "Path": "/products/{**catch-all}"
         },
         "Transforms": [ { "PathPattern": "{**catch-all}" } ]
      }
   },
   "Clusters": {
      "customers-cluster": {
         "Destinations": {
            "destination1": {
               "Address": "http://localhost:5198/api/customer"
            }
         }
      },
      "suppliers-cluster": {
         "Destinations": {
            "destination1": {
               "Address": "http://localhost:5054/api/supplier"
            }
         }
      },
      "products-cluster": {
         "Destinations": {
            "destination1": {
               "Address": "http://localhost:6982/api/product"
            }
         }
      }
   }
}

محدود کردن نرخ اجرا

محدود کردن نرخ یک استراتژی است که برای محدود کردن تعداد درخواست‌هایی که مشتریان API شما مجاز به انجام آن به یک API هستند استفاده می‌شود. محدود کردن نرخ به ایمن سازی برنامه شما و کاهش بار روی API های شما کمک می کند. همچنین می توانید از YARP برای اجرای محدودیت نرخ در دروازه API خود استفاده کنید.

گوگل از مدل زبان هوش مصنوعی PalM 2 رونمایی کرد

قطعه کد زیر نشان می دهد که چگونه می توانید خط مشی محدودیت نرخ را در Yarp تعریف کنید.

builder.Services.AddRateLimiter(rateLimiterOptions =>
{
   rateLimiterOptions.AddFixedWindowLimiter("fixed", options =>
   {
      options.Window = TimeSpan.FromSeconds(5);
      options.PermitLimit = 2;
   });
});

احراز هویت و مجوز را اجرا کنید

می توانید با استفاده از کد زیر در فایل Program.cs، احراز هویت و مجوز را در دروازه API خود اعمال کنید.

builder.Services.AddAuthorization(options =>
{
   options.AddPolicy("secure", policy =>
   policy.RequireAuthenticatedUser());
});

سپس باید روش‌های UseAuthentication و UseAuthorization را برای افزودن امنیت به خط لوله پردازش درخواست فراخوانی کنید.

app.UseAuthentication();
app.UseAuthorization();
app.MapReverseProxy();

درگاه API را تست کنید

برای آزمایش دروازه API که در این مثال ایجاد کرده‌ایم، هر چهار برنامه، یعنی دروازه API و ریزسرویس‌های مشتریان، تامین‌کنندگان و محصولات را اجرا کنید. اکنون Postman را اجرا کنید و نقطه پایانی زیر را اجرا کنید.

http://localhost:5198/customers/1

با فرض اینکه نقاط شکست را در کلاس CustomerController مربوط به ریزسرویس مشتریان تنظیم کرده‌اید، خواهید دید که نقطه پایانی مطابق شکل ۱ زیر وارد شده است.

api gateway 01

شکل ۱: دروازه API در حال کار است!

پیکربندی و استفاده از YARP آسان است. می‌توانید درباره YARP و همه ویژگی‌های آن از اسناد YARP اطلاعات بیشتری کسب کنید. .