۳۰ آذر ۱۴۰۳

Techboy

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

نحوه استفاده از Refit برای مصرف API در ASP.NET Core

از کتابخانه Refit REST استفاده کنید تا مصرف API را ساده کنید و کد خود را پاک‌تر، کارآمدتر و نگهداری آسان‌تر کنید.

از کتابخانه Refit REST استفاده کنید تا مصرف API را ساده کنید و کد خود را پاک‌تر، کارآمدتر و نگهداری آسان‌تر کنید.

Refit یک کتابخانه منبع باز برای .NET، .NET Core و Xamarin است که باعث مصرف REST APIهای ساده‌تر و آسان‌تر با امکان تعریف نقاط پایانی API به عنوان رابط‌های C#، در نتیجه نیاز به ایجاد درخواست‌های HTTP و تجزیه پاسخ‌های HTTP به صورت دستی را از بین می‌برد.

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

در بخش‌های زیر، دو برنامه کاربردی را پیاده‌سازی می‌کنیم، یک Contact API و یک برنامه مشتری برای مصرف Contact API. برنامه Contact API شامل انواع زیر خواهد بود:

  • Contact: این نشان دهنده کلاس مدل است.
  • IContactRepository: این نشان دهنده رابط مخزن تماس است.
  • ContactRepository: این کلاس مخزن تماس را نشان می‌دهد که حاوی روش‌هایی برای برگرداندن اطلاعات تماس است.
  • ContactsController: این نشان‌دهنده کنترل‌کننده API است که برای نمایش نقاط پایانی Contact API در اختیار کلاینت‌های API استفاده می‌شود.

برنامه سرویس گیرنده از Refit برای استفاده از Contact API و نمایش رکوردهای بازیابی شده در پنجره کنسول استفاده می کند.

Refit چیست؟ چرا مفید است؟

Refit یک کتابخانه REST ایمن، سریع و ایمن برای .NET، .NET Core و Xamarin است که REST API شما را به یک رابط تبدیل می‌کند و مصرف سرویس‌های وب RESTful را آسان‌تر می‌کند. Refit به‌طور خودکار تماس‌های HTTP را با استفاده از ویژگی‌هایی برای توصیف عملیات REST به رابط‌های C# تبدیل می‌کند و در نتیجه فرآیند اتصال با APIها را با استفاده از حداقل کد ساده می‌کند.

برای استفاده از APIها با استفاده از Refit، به رابطی نیاز دارید که بتواند با API شما تعامل داشته باشد. Refit به عنوان یک پوشش در اطراف روش های این رابط عمل می کند و درخواست ها و پاسخ های HTTP را به زیبایی مدیریت می کند. Refit به طور خودکار کد دیگ بخار مورد نیاز را برای دسترسی شما به API های خود ایجاد می کند.

اگر برای اولین بار از Refit استفاده می کنید، ابتدا باید نمونه سرویس گیرنده HTTP را با تعیین آدرس پایه، هدرهای HTTP، سریال سازی و اطلاعات سریال سازی و غیره پیکربندی کنید. قطعه کد زیر نشان می دهد که چگونه می توانیم HTTP را پیکربندی کنیم. نمونه مشتری برای اتصال به نقطه پایانی در ASP.NET Core.

string baseAddress = "http://localhost:59904/";
HttpClient _client = new HttpClient();
_client.BaseAddress = new Uri($"{BaseUrl}");
_client.DefaultRequestHeaders.Accept.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string url = BaseUrl + "api/authors";
var response = await _client.GetAuthors(url);
if (response.IsSuccessStatusCode)
{ 
    var result = await response.Content.ReadAsStringAsync();
    var data = JsonSerializer.Deserialize<List<Author>>(result);
}

اگر قبلاً از Refit استفاده می‌کنید، نیازی نیست که با کد دیگ‌افزار اذیت شوید، زیرا Refit می‌تواند همه این وظایف را تنها با چند خط کد C# انجام دهد.

string baseAddress = "http://localhost:59904/";
var endpoint = RestService.For<IAuthorService>(baseAddress);
var contacts = await endpoint.GetAuthors();

همانطور که از قسمت‌های کد قبلی مشاهده می‌کنید، Refit می‌تواند با حذف نیاز به نوشتن کد دیگ بخار، در زمان و تلاش ما صرفه‌جویی کند.

رمزگشایی از رویکرد کد اول در EF Core

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

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

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

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

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

کلاس مدل Contact را ایجاد کنید

یک کلاس جدید به نام Contact در پروژه Web API که ایجاد کردید ایجاد کنید و کد زیر را وارد کنید.

namespace Refit_Demo
{
    public class Contact
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
    }
}

از کلاس Contact در بخش بعدی برای کار با داده ها استفاده می کنیم.

Spin 2.0 بر ترکیب اجزای Wasm و قابلیت حمل می درخشد

کلاس ContactRepository را ایجاد کنید

بعد، یک کلاس مخزن برای کار با داده های مخاطب ایجاد می کنیم. برای سادگی و اختصار، داده های خود را در یک لیست در حافظه ذخیره می کنیم. می‌توانید این پیاده‌سازی را برای ذخیره داده‌ها در پایگاه داده مطابق با نیاز خود تغییر دهید. کلاس ContactRepository IContactRepository را پیاده سازی می کند. این رابط شامل اعلان دو متد یعنی متدهای GetContact و GetContacts می باشد. در حالی که اولی یک رکورد مخاطب را بر اساس شناسه ارسال شده به آن به عنوان پارامتر برمی‌گرداند، دومی همه مخاطبین را برمی‌گرداند.

لیست کد زیر هم رابط IContactRepository و هم کلاس ContactRepository را نشان می دهد.

public interface IContactRepository
{
    public Contact GetContact(int id);
    public List<Contact> GetContacts();
}
public class ContactRepository: IContactRepository
{
    private readonly List<Contact> contacts = new List<Contact>();
    public ContactRepository()
    {
        contacts = new List<Contact>()
        {
            new Contact()
            { Id =1, FirstName = "Keaton", LastName = "Underwood",
                Address = "12/3 ABC Road, Chicago, USA",
            Phone = "1234567890"},
            new Contact(){ Id = 2, FirstName = "John", LastName = "Smith",
                Address = "12/3 ABC Road, New York, USA",
            Phone = "0987654321"}
        };
    }
    public Contact GetContact(int id)
    {
        return contacts.SingleOrDefault(c => c.Id == id);
    }
    public List<Contact> GetContacts()
    {
        return contacts;
    }
}

می‌توانید نمونه‌ای از نوع IcontactRepository را با مجموعه خدمات در Program.cs با استفاده از کد زیر ثبت کنید.

builder.Services.AddScoped<IContactRepository, ContactRepository>();

این به شما امکان می‌دهد از تزریق وابستگی برای ایجاد نمونه‌ای از نوع IContactRepository در برنامه استفاده کنید.

کنترل کننده API را ایجاد کنید

اجازه دهید اکنون کلاس کنترلر را برای Contacts API خود ایجاد کنیم. برای انجام این کار، یک کنترلر API جدید با نام ContactsController ایجاد کنید و کد تولید شده را با کد زیر جایگزین کنید.

using Microsoft.AspNetCore.Mvc;
namespace Refit_Demo.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ContactsController : ControllerBase
    {
        private readonly IContactRepository _contactRepository;
        public ContactsController(IContactRepository contactRepository)
        {
            _contactRepository = contactRepository;
        }
        [HttpGet]
        public async Task<List<Contact>> Get()
        {
            return await _contactRepository.GetContacts();
        }
        [HttpGet("{id}")]
        public async Task<Contact> Get(int id)
        {
            return await _contactRepository.GetContact(id);
        }
    }
}

توجه داشته باشید که چگونه از تزریق سازنده برای ایجاد نمونه ای از نوع IContactRepository در فهرست کد قبلی استفاده کرده ایم.

در بخش‌های بعدی، یک پروژه برنامه کاربردی کنسول ایجاد می‌کنیم و کلاینت Refit را می‌سازیم که API مخاطبین ما را مصرف می‌کند.

یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنید

مراحل زیر را برای ایجاد یک پروژه برنامه کاربردی کنسول هسته دات نت Core در ویژوال استودیو دنبال کنید.

  1. Visual Studio IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. بعدی را کلیک کنید.
  7. در پنجره “اطلاعات اضافی” که در ادامه نشان داده شده است، “NET 8.0 (Long Term Support)” را به عنوان نسخه چارچوبی که می خواهید استفاده کنید انتخاب کنید.
  8. روی ایجاد کلیک کنید.
Mendix با کد پایین PaaS ابرهای صنعتی را برای بخش های کلیدی کسب و کار اضافه می کند

ما از این پروژه برنامه کاربردی کنسول NET Core برای ایجاد مشتری Refit API خود استفاده خواهیم کرد.

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

برای نصب Refit در پروژه خود، پروژه را در پنجره Solution Explorer انتخاب کنید، سپس کلیک راست کرده و “Manage NuGet Packages” را انتخاب کنید.

در پنجره NuGet Package Manager، بسته Refit را جستجو کرده و آن را نصب کنید. همچنین، می‌توانید بسته(های) را از طریق کنسول NuGet Package Manager با وارد کردن دستورات زیر نصب کنید.

PM> Install-Package Refit

کلینت Refit API را ایجاد کنید

اکنون کد تولید شده در فایل Program.cs را با لیست کد زیر جایگزین کنید.

using Refit;
string baseAddress = "http://localhost:59904/";
var contactsAPI = RestService.For<IContactService>(baseAddress);
var contacts = await contactsAPI.GetContacts();
foreach (var contact in contacts)
{
    Console.WriteLine($"{contact.Id} | {contact.FirstName} |
    {contact.LastName}");
}
Console.ReadLine();
[Headers("Accept: application/json", "Content-type: application/json")]
public interface IContactService
{
    [Get("/api/contacts")]
    public Task<Contact> GetContact(int id);
    [Get("/api/contacts")]
    public Task<List<Contact>> GetContacts();
}
public class Contact
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string Phone { get; set; }
}

برنامه را اجرا کنید

از آنجایی که در این مثال دو برنامه وجود دارد، باید هر دو را یکی یکی اجرا کنید. ابتدا برنامه API را اجرا کنید و سپس برنامه کنسول مشتری API را اجرا کنید. هنگامی که هر دو برنامه راه اندازی شدند، داده های بازیابی شده از برنامه Contacts API را مشاهده خواهید کرد که در کنسول نمایش داده شده است، همانطور که در شکل ۱ نشان داده شده است.

بازسازی هسته aspnet

شکل ۱. سرویس گیرنده API Refit شما در حال فعالیت است.

Refit یک انتخاب عالی برای اجرای سرویس گیرندگان HTTP REST API است. Refit کد دیگ بخار مورد نیاز برای اتصال و کار با REST APIها در برنامه های ASP.NET Core را بسیار ساده می کند. نکته مهمی که باید به آن توجه کنید این است که وقتی از Refit استفاده می کنید، همه درخواست ها باید ناهمزمان باشند. Refit از تماس های شبکه همزمان پشتیبانی نمی کند.