GraphQL چیست؟

GraphQL چیست؟

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

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

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

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

همان طور که می‌بینیم برای هر موجودیت یک Endpoint در نظر گرفتیم.
حتی ممکن است برای هر Endpoint یک سری Parameter داشته باشیم.

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

یا اینکه برخی از پارامترها با header تنظیم شود مثلا url صفحه قبلی و بعدی به صورت http header باشد.
این موارد تنها قسمتی از مشکلاتی است که در کار کردن با APIها ممکن است با آن‌ها مواجه شویم. برای درک بهتر مسئله به تصویر زیر توجه کنید.

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

ما درGraphql داده را به صورت Graph می‌بینیم و به صورت Graph درخواست می‌کنیم. اما نکته قابل توجه این است کهGraph ها را در graphql به صورت Json در نظر می‌گیریم.
فرض کنید می‌خواهیم در یک API که با GraphQL نوشته شده است پست‌ها را دریافت کنیم به صورت زیر عمل می‌کنیم

{
     post
}

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

  post {
    title,
    body,
    userId
  }
}

همچنین می‌توانیمpagination را نیز پیدا سازی کنیم مثلا بگوییم Count را مساوی ۱۰ قرار بده.

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

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

یک مثال خیلی ساده را با هم بررسی می‌کنیم.
در Visual Studio یک پروژه از نوع Console ایجاد می‌کنیم و 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"
  }
}

در مقاله بعدی نحوه پیاده سازی API را با Graphql بررسی خواهیم کرد.
برای اطلاعات بیشتر می‌توانید به سایت graphql مراجعه نمایید.

https://graphql.org/

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

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

اولین نفر باش

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

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

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

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

      • با سلام

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

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

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

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