GraphQL چیست؟ آشنایی با نحوه اجرا، مشخصه ها و مزیت های استفاده از گراف کیوال

GraphQL چیست؟ آشنایی با نحوه اجرا، مشخصه ها و مزیت های استفاده از گراف کیوال

نوشته شده توسط: محمد رضا عظیمی
تاریخ انتشار: ۱۶ بهمن ۱۳۹۸
آخرین بروزرسانی: ۱۹ تیر ۱۴۰۳
زمان مطالعه: 5 دقیقه
۵
(۳)

GraphQL چیست؟ گراف کیوال یک زبان کوئری‌نویسی برای API ها و همچنین، یک محیط زمان اجرا (Runtime Environment) محسوب می‌شود که روی بخش سمت سرور قرار می‌گیرد. به‌واسطه استفاده از این زبان، اپلیکیشن‌های کلاینت این مجوز را دارند که دقیقاً برای داده‌های موردنیاز خود به API درخواست ارسال کنند. این ویژگی به بهبود کارایی و انعطاف‌پذیری کمک خواهد کرد.

مشخصه های GraphQL چیست؟

اصلی‌ترین مشخصه‌های GraphQL عبارتند از:

  • زبان کوئری‌نویسی: با کمک GraphQL، کلاینت‌ها برای تعریف داده‌های درخواستی‌شان از API ها، از یک نحو (Syntax) مخصوص برخوردار هستند.
  • انعطاف‌پذیری: کلاینت‌ها می‌تواند در یک درخواست واحد، از چندین سورس مختلف درون یک API، دیتا درخواست کنند.
  • کارایی: با درخواست دادن برای دیتای موردنیاز، گراف کیوال از واکشی بیش‌اندازه اطلاعات غیرضروری جلوگیری می‌کند.
  • رویکرد ساختاریافته: GraphQL با استفاده از یک شِما (Schema)، داده‌های در دسترس و روابط آن‌ها را تعریف می‌‌کند.

مزیت استفاده از GraphQL چیست؟

استفاده از GraphQL مزیت‌های زیر را به‌همراه دارد:

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

GraphQL : یک زبان پرس و جو برای API شما

هنگامی که از API نام برده می‌شود، مشکلات و چالش‌های آن یادآوری می‌شوند که لازم است به آن‌ها رسیدگی شوند. مشکلاتی مانند وجود Endpoint های متفاوت، درخواست‌های متعدد، داده‌های غیرضروری، مستندسازی هر Endpoint و پارامتر‌های آن و…، همگی مواردی هستند که ممکن است با آن‌ها مواجه شویم. شاید در اولین نظر تصور کنید که برای مواجه با مشکلات مذکور، راه حل‌هایی در RestAPI ارائه شده است.

فیسبوک GraphQL را به‌عنوان راه حلی برای کار کردن با API ها ارائه کرده است. GraphQL یک Library یا یک فریمورک نیست؛ بلکه راه حلی برای ساخت API با ساختاری شبیه به Graph است. دحقیقت، گراف کیوال به جای اینکه API را در قالب Endpoint های متعدد درنظر بگیرد، آن‌ها را در قالب Graph درنظر می‌گیرد.

برای درک بهتر مفهوم GraphQL ، مثال زیر را بررسی خواهیم کرد:

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

 

/api/post
/api/posts/**POST_ID**/comments
/api/posts/**POST_ID**/likes
/api/comments/**POST_ID**
/api/users
/api/users/**USER_ID**
api/posts/**POST_ID**
/api/likes/**POST_ID**

 

در مثال فوق، برای هر موجودیت یک Endpoint درنظر گرفته شده است. حتی ممکن است برای هر Endpoint ، تعدادی Parameter داشته باشیم.

 

/api/posts?count=1&offset=20&fields=title,body,user

 

ضمن اینکه ممکن است برخی از پارامترها با Header تنظیم شوند. به‌عنوان مثال، URL صفحه قبلی و بعدی به‌صورت HTTP Header باشد. این موارد، تنها بخشی از مشکلات احتمالی‌ای است که در کارکردن با API ها با آن‌ها مواجه می‌شوید. برای درک بهتر موضوع، به تصویر زیر توجه کنید:

 

GraphQL : یک زبان پرس و جو برای API شما

 

GraphQL چه راه حل هایی ارائه کرده است؟

در GraphQL، داده‌ها به‌صورت Graph دیده می‌شوند و به‌صورت Graph درخواست داده خواهند شد. نکته قابل توجه این است که Graph ها در آن، به‌صورت JSON درنظر گرفته می‌شوند.

فرض کنید می‌خواهیم در یک API که با GraphQL نوشته شده است، پست‌ها را دریافت کنیم. برای این کار، اقدامات زیر لازم هستند:

 

{
     post
}

 

برای دریافت فیلدهای مشخص، به شکل زیر عمل کنید:

 

 post {
    title,
    body,
    userId
  }
}

 

همچنین می‌توانیم Pagination را نیز پیداسازی کنید. به‌عنوان مثال، Count را مساوی ۱۰ قرار دهید:

 

{
  post(userID: 20, count: 10, offset= 20) {
    title,
    body
  }
}

 

بررسی نحوه استفاده از GraphQL

در این مثال، قصد داریم مفاهیم را به زبان ساده تشریح کنیم. ابتدا یک پروژه از نوع Console در Visual Studio ایجاد کرده و GraphQL را ازطریق NuGet برروی پروژه خود نصب کنید.

 

using GraphQL;
using GraphQL.Types;
using System;
namespace GraphQL
{
    class Program
    {
        static void Main(string[] args)
        {
            var schema = Schema.For(@"
              type Query {
                id: ID,
                name : String,
                course : String
              }
            ");
            var _root = new { id = 100, name = "nikamooz", course = "sqlserver" };
            //Id, name
            var json = schema.Execute(a =>
            {
                a.Query = "{ id, name }";
                a.Root = _root;
            });
            Console.WriteLine(json);
            Console.WriteLine("---------------------------------------------");
            //Id,name,course
            json = schema.Execute(a =>
            {
                a.Query = "{ id, name, course }";
                a.Root = _root;
            });
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }
}

 

خروجی برنامه به‌صورت زیر خواهد بود:

 

{
  "data": {
    "id": "100",
    "name": "nikamooz"
  }
}
--------------------------------
{
  "data": {
    "id": "100",
    "name": "nikamooz",
    "course": "sqlserver"
  }
}

 

تفاوت REST API و GraphQL چیست؟

  • ساختار و زبان: REST API ها یک سبک معماری خاصی برای ساخت API های وب ارائه می‌کنند. آن‌ها بر متدهای استاندارد HTTP شامل GET، POST، PUT و DELETE و همچنین، Endpoint های ازپیش‌تعریف‌شده اکتفا می‌کنند. GraphQL همانند یک زبان کوئری‌نویسی خاص برای API های طراحی شده است و به کلاینت‌ها این امکان را می‌دهد که دیتای موردنظر خود را دقیقاً تعیین کنند.
  • واکشی دیتا: در REST API، کلاینت دیتا را از Endpoint های خاصی درخواست می‌کند که ساختار داده‌های ثابتی دارند. این موضوع می‌تواند به واکشی بیشتر از اندازه منجر شود و بر کارایی تأثیر منفی بگذارد. در حالی که گراف کیوال به شما اجازه می‌دهد تا ازطریق کوئری‌هایی تعیین کنید دقیقاً کدام فیلدها از بخش‌های مختلف بک‌اند موردنیاز هستند.
  • اسکیما: معمولاً REST API ها یک تعریف اسکیمای رسمی ندارند؛ این یعنی، ساختارهای داده براساس قالب پاسخ و Endpoint و به‌طور ضمنی هستند. در نقطه مقابل، GraphQL بر یک اسکیما تعریف‌شده و مناسب اکتفا می‌کند. در این اسکیما، نوع‌های داده‌، روابط و عملیات در دسترس به طور صریح تشریح شده‌اند. این مشخصه به بهبود تجربه توسعه منجر می‌شود.
  • پیچیدگی: معمولاً مدیریت و تنظیم REST API ها، به‌ویژه API های ساده با مدل‌های دیتای مناسب، ساده‌تر است. GraphQL می‌تواند در تنظیم و نگهداری اسکیما پیچیده‌تر باشد و به نوعی Learning Curve در ارتباط با آن وجود دارد.

مروری بر GraphQL و دلایل اهمیت آن

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

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۳

اولین نفر باش

title sign
معرفی نویسنده
محمدرضا عظیمی
مقالات
3 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
محمدرضا عظیمی
title sign
دیدگاه کاربران

    • با عرض سلام و خسته نباشین
      آیا یادگیری Graphql برای بک اند کار ها هست ؟ حالا با هر زبانی که میخواد کار کنه
      چون که فرانت اند کار چیزی رو دریافت نمیکنه

      • با سلام
        بله این موضوع مروبط به بک‌اند کار می‌باشد و سمت برنامه نویس باید مدیریت شود.
        شاد و پیروز باشید.

    • با عرض سلام و خسته نباشین
      آیا یادگیری Graphql برای بک اند کار ها هست ؟ حالا با هر زبانی که میخواد کار کنه
      چون که فرانت اند کار چیزی رو دریافت نمیکنه

      • با سلام

        بله این موضوع مروبط به بک‌اند کار می‌باشد و سمت برنامه نویس باید مدیریت شود.

        شاد و پیروز باشید.

    • مطلب ارائه شده خیلی کاربردیه، لطفا سریعتر ادامه مطلب رو منتشر کنید.
      با تشکر

    • مطلب ارائه شده خیلی کاربردیه، لطفا سریعتر ادامه مطلب رو منتشر کنید.
      با تشکر