4 دلیل برای اینکه از GraphQL بیشتر از REST API استفاده کنید

ترجمه و تالیف : عرفان حشمتی
تاریخ انتشار : 02 اسفند 99
خواندن در 3 دقیقه
دسته بندی ها : برنامه نویسی

بسیاری از توسعه دهندگان REST را برای ارسال داده از طریق HTTP ترجیح می‌دهند، زیرا هنگام ایجاد API نیازی به نصب نرم‌افزار یا کتابخانه اضافی ندارند. گرچه GraphQL به طور معمول به عنوان فناوری جایگزین REST API معرفی می‌شود. در این مقاله در مورد مزایا، محدودیتها و تفاوتهای این دو توضیح خواهیم داد که به شما کمک می‌کند تصمیم بگیرید برای پروژه بعدی خود کدام یک را انتخاب کنید. بنابراین بدون هیچ توضیح اضافه، بیایید به بحث اصلی بپردازیم.

REST چیست؟

REST یک سبک معماری برای ارائه استانداردهای بین سیستم‌های رایانه‌ای در وب است که ارتباط سیستم‌ها با یکدیگر را آسان‌تر می‌کند. توسط REST می‌توان پیاده سازی کلاینت و سرور را از هم جدا کرد. برای رسیدن به این هدف ما از عملیات stateless از جمله (GET ،POST ، PUT و DELETE) برای ارسال و دریافت منابع استفاده می‌کنیم.

ایده پشت معماری این است که شما می‌توانید با ارسال درخواست در URL، منبعی را بازیابی کرده و پاسخی دریافت کنید (معمولا JSON، اما به API بستگی دارد).

مزایای REST

  • REST مقیاس پذیر است؛ زیرا کلاینت را از سرور جدا می‌کند و به شما امکان می‌دهد برنامه خود را به راحتی مقیاس بندی کنید.
  • انعطاف پذیری یکی دیگر از مزایای REST است؛ زیرا داده‌ها به منابع یا متدها وابسته نیستند، بنابراین REST می‌تواند انواع مختلفی از فراخوانی‌ها را کنترل کند و فرمت‌های مختلف داده را برگرداند.

محدودیت‌های REST

پیش از واکشی: این زمانی است که نقطه پایانی API اطلاعات بیشتری را از آنچه مورد نیاز کلاینت است، فراهم میکند.

تحت واکشی: این زمانی است که نقطه پایانی API تمام اطلاعات مورد نیاز را ارائه نمیدهد. بنابراین کلاینت باید چندین درخواست برای دریافت هر آنچه که مورد نیاز برنامه است، انجام دهد.

ما برای درک کامل مفاهیم فوق از یک مثال استفاده خواهیم کرد.

GraphQL چیست؟

GraphQL یک زبان پرس و جو برای APIها و یک زمان اجرا (runtime) برای انجام آن کوئری‌ها با داده‌های موجود است. GraphQL توضیحات کامل و قابل فهم از داده‌های موجود در API شما را فراهم می‌کند، همچنین به کلاینت این قدرت را می‌دهد که دقیقا همان چیزی را که نیاز دارد به دست آورد و نه چیز دیگری. علاوه بر این، به شما امکان می‌دهد موجودیت‌های مختلف را در یک جستجوی واحد ترکیب کنید.

مزایای GraphQL

  • داده‌ها را به صورت جامع بازیابی کنید، هیچ چیز اضافی وجود ندارد. در GraphQL آنچه را که درخواست می‌کنید به دست می‌آورید و نه چیز دیگری را، که این بسیار خوب است.
  • توسعه سریعتر در کلاینت. معمولا هنگامی که در داده تغییراتی ایجاد می‌شود، فقط باید کوئری را تغییر دهید و تغییر زیادی لازم نیست. بنابراین امکان تکرار سریع محصول وجود دارد. هر دو تیم توسعه دهنده کلاینت و سرور می‌توانند به طور مستقل کار کنند، به شرطی که هر دو تیم از ساختار داده‌ها اطلاع داشته باشند. به عنوان مثال پیاده‌سازی‌های کلاینت و سرور از یکدیگر مستقل هستند.

مثال مقایسه هر دوی آنها

بیایید فرض کنیم ما فید کاربر را با لیستی از پست کاربر و دنبال کنندگان وی نمایش میدهیم. در این مورد ما باید نویسنده پست، خود پست‌ها و همچنین دنبال کنندگان را برای آن کاربر نمایش دهیم.

اگر می‌خواستیم از REST استفاده کنیم، حداقل 2 یا 3 درخواست انجام می‌دادیم. مشابه این:

  • /user/<id> برای دریافت جزئیات کاربر (نویسنده) مانند نام کاربری.
  • /user/<id>/posts برای دریافت لیست پست‌های ارسال شده توسط آن کاربر.
  • /user/<id>/followers برای دریافت لیست دنبال کنندگان یک کاربر خاص.

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

اینجاست که GraphQL پتانسیل خود را نشان می‌دهد. ما باید کوئری را مشخص کنیم و بتوانیم خروجی مورد نظر را به دست آوریم. برای دستیابی به همان استفاده GraphQL، می‌توانیم از کوئری مشابه زیر استفاده کنیم:

query {
  User(id: '123') {
    name
    posts {
      title
    }
    followers {
      name
    }
  }
}

با استفاده از چنین کوئری قادر به دریافت پاسخ JSON با خصوصیات زیر خواهیم بود. تمیز و ساده، درست است؟

GraphQL در مقابل REST

به طور خلاصه در اینجا چند تفاوت برجسته بین GraphQL و REST وجود دارد:

1. واکشی داده‌ها

REST باعث واکشی بیش از حد یا واکشی کم می‌شود، در حالی که این مورد در GraphQL وجود ندارد. در GraphQL آنچه می‌خواهید همان چیزی است که به دست می‌آورید.

2. تعریف شی (پاسخ JSON)

در REST می‌توانید شی درخواست را در بک-اند و در GraphQL شی را در فرانت-اند تعریف کنید.

3. حافظه پنهان خودکار

REST به طور خودکار حافظه پنهان را اجرا می‌کند، در حالی که GraphQL فاقد سیستم ذخیره خودکار است، اما از کلاینت‌هایی مانندApollo Client ، Relay و موارد دیگر استفاده کرده و به این طریق ذخیره سازی را امکان پذیر می‌کند. حافظه پنهان به کلاینت این امکان را می‌دهد تا بدون ارسال درخواست‌های غیرضروری شبکه، به کوئری‌های مربوط به همان داده‌ها پاسخ دهد.

4. مدیریت خطا

مدیریت خطا در REST در مقایسه با GraphQL بسیار ساده‌تر است، که به طور معمول 200 وضعیت کد OK را به شما می‌دهد، حتی اگر خطایی وجود داشته باشد. اما هنگام استفاده از کلاینت‌هایی مانندApollo Client  و Relay رسیدگی به خطاها به راحتی امکان پذیر است.

GraphQL برای سناریوهای زیر بهترین عملکرد را دارد:

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

جمع بندی

GraphQL مطمئنا مزایای بسیاری نسبت به REST دارد، اما ممکن است همیشه بهترین گزینه نباشد. همانطور که قبلا گفته شد، انتخاب بین REST یا GraphQL به برنامه شما بستگی دارد.

امیدواریم این مقاله به شما کمک کند تا در پروژه‌های آینده خود تصمیم درست را بگیرید. اگر دوست دارید تجربیات خود را در مورد GraphQL یا REST به اشتراک بگذارید، آن را در بخش نظرات بنویسید.

منبع

گردآوری و تالیف عرفان حشمتی
آفلاین
user-avatar

مهندس معماری سیستم های کامپیوتری، برنامه نویس و طراح وب سایت

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید