راهنمای جامع استفاده از HttpClient در ASP.NET Core API

شکل
شکل
شکل
شکل
شکل
شکل
شکل
شکل
راهنمای جامع استفاده از HttpClient در ASP.NET Core API

راهنمای جامع استفاده از HttpClient در ASP.NET Core API

فراخوانی سرویس‌های دیگر یکی از کارهای روزمره توسعه‌دهندگان ASP.NET Core است. برای این کار، HttpClient ابزار استاندارد و قدرتمند مایکروسافت محسوب می‌شود. اما استفاده نادرست از آن می‌تواند مشکلات جدی در عملکرد و پایداری برنامه شما ایجاد کند. این مقاله یک راهنمای کامل برای استفاده از HttpClient در ASP.NET Core API به روشی مدرن و بهینه است.در این مطلب، ما به شما نشان می‌دهیم که چگونه با استفاده از IHttpClientFactory، ارتباطات شبکه‌ای خود را به صورت حرفه‌ای مدیریت کنید. بنابراین، با پیچیدگی‌های قدیمی خداحافظی کرده و روش‌های جدید را بیاموزید. این رویکرد نه تنها کد شما را تمیزتر می‌کند، بلکه از بروز خطاهای رایج نیز جلوگیری خواهد کرد. بیایید شروع کنیم! 🚀

چرا HttpClient بهترین انتخاب است؟

HttpClient یک کلاس قدرتمند برای ارسال درخواست‌های HTTP و دریافت پاسخ‌های HTTP از یک منبع مشخص شده با URI است. در گذشته، توسعه‌دهندگان مستقیماً یک نمونه جدید از HttpClient برای هر درخواست ایجاد می‌کردند.

 csharp
// روش قدیمی و مشکل‌ساز ❌
using (var client = new HttpClient())
{
    var result = await client.GetAsync("https://api.example.com/data");
    // ...
}

این روش یک مشکل بزرگ به نام “فرسودگی سوکت” (Socket Exhaustion) ایجاد می‌کند. هر نمونه جدید HttpClient یک سوکت شبکه را اشغال کرده و آن را برای مدتی در حالت TIME_WAIT نگه می‌دارد. با افزایش ترافیک، این مسئله منجر به کمبود منابع و از کار افتادن برنامه می‌شود.

معرفی IHttpClientFactory: راهکار مدرن و بهینه

مایکروسافت برای حل این مشکل، IHttpClientFactory را در ASP.NET Core 2.1 معرفی کرد. این ابزار، یک راهکار متمرکز برای ایجاد و مدیریت نمونه‌های HttpClient فراهم می‌کند. در نتیجه، مشکلات مربوط به مدیریت طول عمر و فرسودگی سوکت به طور کامل حل می‌شود.

مزایای کلیدی استفاده از IHttpClientFactory

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

  • مدیریت بهینه سوکت‌ها: IHttpClientFactory اتصالات شبکه را در یک Pool مدیریت می‌کند. این کار از ایجاد بی‌رویه سوکت‌های جدید جلوگیری کرده و آن‌ها را مجدداً استفاده می‌کند.
  • مدیریت طول عمر HttpClient: این ابزار به طور هوشمند طول عمر HttpClientHandler ها را مدیریت می‌کند تا مشکلات DNS نیز بروز نکند.
  • پیکربندی متمرکز: شما می‌توانید تمام تنظیمات مربوط به HttpClient مانند BaseAddress، Headers و Timeout را در یک مکان مرکزی (فایل Program.cs) پیکربندی کنید.
  • افزودن Middleware: به راحتی می‌توانید از کتابخانه‌هایی مانند Polly برای پیاده‌سازی الگوهای پایداری (Resiliency Patterns) مانند Retry و Circuit Breaker استفاده کنید.

راهنمای گام به گام: استفاده از ASP.NET Core API با HttpClient

حالا بیایید به صورت عملی نحوه استفاده از این ابزار قدرتمند را بررسی کنیم. این فرآیند بسیار ساده و سرراست است.

گام اول: پیکربندی IHttpClientFactory در Program.cs

ابتدا باید سرویس HttpClient را در کانتینر وابستگی (DI Container) برنامه خود ثبت کنید. این کار در فایل Program.cs (در .NET 6 و جدیدتر) انجام می‌شود.

 csharp
var builder = WebApplication.CreateBuilder(args);

// اضافه کردن سرویس HttpClient به DI Container
builder.Services.AddHttpClient();

// سایر سرویس‌ها
builder.Services.AddControllers();

var app = builder.Build();

// ...

گام دوم: ساخت یک سرویس برای فراخوانی API

بهترین روش، ایجاد یک کلاس سرویس جداگانه برای منطق فراخوانی API است. در این کلاس، IHttpClientFactory را از طریق Constructor تزریق می‌کنیم.

csharp
public class MyApiService
{
    private readonly IHttpClientFactory _httpClientFactory;

    public MyApiService(IHttpClientFactory httpClientFactory)
    {
        _httpClientFactory = httpClientFactory;
    }

    public async Task<string?> GetDataFromApiAsync()
    {
        // یک نمونه HttpClient از Factory ایجاد می‌کنیم
        var client = _httpClientFactory.CreateClient();

        // ارسال درخواست GET
        var response = await client.GetAsync("https://api.example.com/products");

        if (response.IsSuccessStatusCode)
        {
            // خواندن محتوای پاسخ
            string content = await response.Content.ReadAsStringAsync();
            return content;
        }

        return null;
    }
}

گام سوم: ارسال درخواست‌های POST و PUT

برای ارسال داده (مثلاً در فرمت JSON) در درخواست‌های POST یا PUT، می‌توانید از کلاس JsonContent استفاده کنید. این روش کد شما را تمیزتر و خواناتر می‌کند.

 csharp
public async Task CreateProductAsync(ProductDto newProduct)
{
    var client = _httpClientFactory.CreateClient();

    // ایجاد محتوای JSON و ارسال درخواست POST
    var response = await client.PostAsJsonAsync("https://api.example.com/products", newProduct);

    // بررسی موفقیت‌آمیز بودن عملیات
    response.EnsureSuccessStatusCode();
}

گام چهارم: مدیریت پاسخ (HttpResponseMessage)

همیشه وضعیت پاسخ دریافت شده را بررسی کنید. شی HttpResponseMessage متدهای مفیدی برای این کار دارد.

  • IsSuccessStatusCode: یک مقدار bool برمی‌گرداند که نشان‌دهنده موفقیت (کدهای 2xx) است.
  • EnsureSuccessStatusCode(): اگر درخواست موفقیت‌آمیز نباشد، یک استثنا (HttpRequestException) پرتاب می‌کند.
  • ReadAsStringAsync(): محتوای پاسخ را به صورت رشته می‌خواند.
  • ReadFromJsonAsync<T>(): محتوای JSON را مستقیماً به یک شی از نوع T تبدیل می‌کند.

کاربردهای عملی HttpClient در پروژه‌ها

HttpClient و IHttpClientFactory ستون فقرات ارتباطات خارجی در بسیاری از برنامه‌های مدرن هستند.

  • 💡 ارتباط با سرویس‌های ثالث: برای اتصال به درگاه‌های پرداخت، سرویس‌های ایمیل، یا APIهای شبکه‌های اجتماعی.
  • 💡 ساخت معماری میکروسرویس: برای برقراری ارتباط امن و پایدار بین سرویس‌های مختلف در یک معماری میکروسرویس.
  • 💡 دریافت داده از منابع عمومی: برای فراخوانی APIهای عمومی مانند اطلاعات آب و هوا، نرخ ارز یا اخبار.
  • 💡 ارسال داده به وب‌هوک‌ها (Webhooks): برای اطلاع‌رسانی به سیستم‌های دیگر در مورد وقوع یک رویداد خاص.

راهنمای جامع استفاده از HttpClient در ASP.NET Core API

ثبت‌نام و دریافت کلید API

بسیاری از APIها برای استفاده نیاز به یک کلید اختصاصی (API Key) دارند. این کلید هویت برنامه شما را تأیید می‌کند. معمولاً برای دریافت کلید، باید در وب‌سایت ارائه‌دهنده سرویس ثبت‌نام کنید. 🔑

برای مثال، اگر از یک پلتفرم API مدیریت شده استفاده می‌کنید، ابتدا باید یک حساب کاربری بسازید. برای شروع و ایجاد حساب، می‌توانید از طریق لینک p.api.ir اقدام کرده و مراحل ثبت‌نام را طی کنید تا کلید API خود را دریافت نمایید.

نکات نهایی برای حرفه‌ای‌ها

استفاده از IHttpClientFactory یک استاندارد صنعتی در توسعه ASP.NET Core است. این ابزار نه تنها از مشکلات عملکردی جلوگیری می‌کند، بلکه کد شما را برای توسعه و نگهداری در آینده آماده می‌سازد.

نکات کلیدی را به خاطر بسپارید:

  1. همیشه IHttpClientFactory را به جای new HttpClient() به کار ببرید.
  2. منطق فراخوانی API را در کلاس‌های سرویس مجزا قرار دهید.
  3. همواره از نسخه‌های async متدها (مانند GetAsync) استفاده کنید تا برنامه شما Non-blocking باقی بماند.
  4. پاسخ‌ها و خطاهای احتمالی را به درستی مدیریت کنید.

امیدواریم این راهنما به شما در نوشتن کدهای بهتر و پایدارتر کمک کرده باشد. تجربیات و سوالات خود را در بخش نظرات با ما در میان بگذارید! ✍️

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *