ویرگول
ورودثبت نام
رضا احمدی
رضا احمدیمهندس نرم افزار و توسعه دهنده Back-End با توسعه ی کتابخونه و نرم افزارهای متن باز سرگرمم 🙂
رضا احمدی
رضا احمدی
خواندن ۲ دقیقه·۸ ماه پیش

ارسال درخواست HTTP در دات‌نت با کد کمتر و خوانایی بیشتر


کتابخونه Http.Request.Builder یه پکیج سبک برای ارسال درخواست های REST با قابلیت کد نویسی کمتر، خواناتر و کاهش برخی پیچیدگی ها که بر بستر دات نت پیاده سازی شده.

در ادامه، اول بررسی میکنیم که این پکیج چه تفاوتی با HttpClient سی شارپ داره و بعدش با امکانات بیشتری از این پکیج آشنا میشیم.

یک درخواست Get ساده با HttpClient (روش معمولی):

برای ارسال یک درخواست Get خیلی ساده، شما باید از شیء های HttpClient، HttpRequestMessage یک نمونه بسازید، اونارو مقدار دهی کنید و متد ارسال رو صدا بزنید. مثل این روش:

var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, &quothttps://google.com&quot); var response = await client.SendAsync(request); string response = await response.Content.ReadAsStringAsync();

حالا اگه درخواست موفق باشه، توی خط آخر، response بصورت string دریافت میشه. حالا فرض کنید عملیات deserialize هم بخوایم که باید چند خط دیگه هم بنویسیم...

📦 یک درخواست Get ساده با پکیج Http.Request.Builder:

کافیه با متد Create از RequestBuilder، درخواست رو بسازیم و متد Send رو صدا بزنیم:

var request = RequestBuilder .Create(&quothttps://google.com&quot) .Build(); var response = await request.SendAsync();

این قطعه کد، خوانایی بالایی داره و استفاده از اون راحت تره.

همچنین اگه عملیات deserialize داشتیم، میتونیم از قابلیت generic استفاده کنیم. برای مثال، قراره از یه وب سرویسی، گزارش آب و هوا بگیریم و response رو توی این شیء deserialize کنیم:

public class WeatherResponse { public decimal Temperature { get; set; } // دمای هوا public byte HumidityPercentage { get; set; } // درصد رطوبت هوا }

فقط کافیه اونو به متد SendAsync معرفی کنید:

var response = await request.SendAsync<WeatherResponse>();

💥 چالش: اگه یه درخواست با خطا مواجه شد چی؟

قطعا ما بعنوان برنامه نویس، باید تا جایی که ممکنه، احتمال بروز خطا رو کاهش بدیم، تا نسبت به خطا و مشکلات مقاوم باشه. گاها ممکنه دلایلی باعث بشن، نرم افزار توی ارتباط با یه سرویس خارجی، ناموفق باشه. دلایلی مثل قطعی لحظه ای شبکه، ترافیک بالا، Down time های لحظه ای و غیره باشه.

💡 برای این چالش باید با Loop، یه پترن Retry بنویسیم تا دوباره عملیات ارسال درخواست، یک یا چندبار دیگه تکرار بشه تا احتمالا موفقیت بیشتر بشه. (درواقع یکی دوتا متد و شرط و چندتا متغییر و یه حلقه لازمه تا عملیات تکرار بشه!)

⚠️ برای پروژه هایی با مقیاس بزرگ و پیچیده، بهتره از کتابخونه ی Polly استفاده کنید. چون Polly امکانات این پکیج رو تو خودش داره، امکان مدیریت انواع خطاها رو هم داره. اما این پکیج کوچک و سبک، فقط یه ابزار کمکی برای ایجاد درخواسته.

سی شارپdotnetدات نتresthttp
۲
۰
رضا احمدی
رضا احمدی
مهندس نرم افزار و توسعه دهنده Back-End با توسعه ی کتابخونه و نرم افزارهای متن باز سرگرمم 🙂
شاید از این پست‌ها خوشتان بیاید