آموزش graphql

آموزش GraphQL

تخمین مدت زمان مطالعه : 5 دقیقه
  • سطح مقاله : متوسطه
  • نویسنده : پوریا منتخب

آموزش GraphQL  یکی از مباحثی هست که این روزا برای برنامه نویس هایی که با API سرو کار دارن ترند شده و همه میخوان ازش در پروژه هاشون استفاده کنن، اما بزارین قبل از شروع به استفاده یک کم باهاش آشنا بشیم.
GraphQl یک زبان پرس و جو، به صورت Server-side runtime  برای توسعهAPI  هاست که به کلاینت ها این امکان رو میده تا بتونن فقط داده مورد نیاز خودشون رو دریافت کنن نه داده های اضافه تر. GraphQl ها برای ایجاد API های سریعتر، قابل انعطاف تر و توسعه دهنده پسندتر (منظور همون  Developer friendly 😊) به وجود اومدن. اونها حتی میتونن بدون داشتن یک IDE توسعه داده بشن. به عنوان جایگزینی برای API های REST، GraphQL ها به توسعه دهنده ها این امکان رو میدن تا داده هایی رو از چند منبع داده در یک درخواست API  مدیریت کنن.علاوه بر این GraphQL  ها یک امتیاز انعطاف پذیر بی نظیر دیگه در اختیار نگهدارندگانAPI  ها قرار میدن، به این صورت که بتونن بدون تحت تاثیر قرار دادن کوئری های موجود یه سری فیلد ها رو اضافه یا منسوخ کنن.توسعه دهنده ها میتونن به هر روشی که ترجیح میدن API خودشون رو بسازن و GraphQL عملکرد اون ها رو به روش های قابل پیش بینی برای مشتری ها تضمین می کنه.


Schemas , Resolvers  و دیگر اصطلاحات رایج GraphQL

توسعه دهنده های API  از GraphQl ها برای ایجاد یک Schema استفاده می کنن که در اون تمام داده هایی که کلاینت ها میتونن به عنوان کوئری در این سرویس بگیرن مشخص شده. GraphQl Schemaها از یه سری آبجکت ها ایجاد شدن که مشخص می کنن چه آبجکت هایی رو میتونین درخواست کنین و هر کدوم از اونها میتونن چه فیلد هایی داشته باشن. همینطور که query ها دریافت میشن، GraphQl  ها اون هارو مجدد اعتبار سنجی می کنن از طریق Schema ها،سپس GraphQl  ها query های اعتبار سنجی شده را اجرا می کنن. توسعه دهنده های API  میتونن هر فیلدی رو که میخوان در قالب یه فانکشن که resolver   نامیده میشه به Schema  اضافه کنن.در زمان اجرا resolver  ها کال میشن و مقادیر رو برای ما آماده میکنن.
جدا از بخش تعریف اولیه و اعتبار سنجی، GraphQl بیشترین تصمیمات و اختیارات دیگر را به توسعه دهنده واگذار می کند. GraphQl ها هیچ روشی برای نگهداری داده ها ویا استفاده از زبان برنامه نویسی خاصی، ارائه نمی دهند. یعنی در واقع محدود به زبان برنامه نویسی خاصی نیست، به طور مثال توسعه دهنده ها میتونن از زبان PHP (graphql-php)، Scala(Sangria)  ، Python (Graphene Python)  ، Ruby(graphql-ruby)، JavaScript(graphql.js)  و یا سایر موارد استفاده کنن. GraphQL ها بدون نیاز به شبکه، مجوز و یا pagination  خاصی ارائه میشن. از نقطه نظر کلاینت ها، رایج ترین عملیات GraphQL، احتمالا query ها و mutation  ها هستن که میتونیم اونها رو مثل عملیات CRUD یعنی  Create، Read، Update  ، Delete  در نظر بگیریم. query ها در واقع همون عملیات Read  ما هستن و mutation  ها هم معادل سایر عملیات (Update , Create , Remove).


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

آیا تصمیم گرفتین که از GraphQl ها در پروژه یه سازمانتون استفاده کنین ؟ دراین قسمت  ، راجع به یک سری از مزایا و معایب اون براتون گفتم :

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

  1. در یک ارتباط رفت و برگشت ساماندهی میشن. کلاینت ها فقط داده ی درخواستی خودشون رو دریافت می کنن و نه هیچ داده اضافه تری.
  2. Strongly Data Type  های موجود در GraphQL ها باعث کاهش ارتباطات نادرست بین کلاینت ها و سرور ها می شن.
  3. درون نگر هستن (آقا سخته خدایی، وقتی ترجمه میشن کلا مفهومشون عوض میشه 😊).یعنی کلاینت ها میتونن لیستی از دیتا تایپ های موجود رو درخواست بدن، روشی ایده آل برای تولید خودکار مستندات.
  4. این امکان رو میدن که بدون دست خوردن و از کار افتادن query های موجود اون ها رو توسعه و تکمیل کنیم.
  5. اکستنشن های متن باز زیادی برای ارائه ویژگی های مختلفی از GraphQL  موجودن که درREST  موجود نیستن.
  6. توسعه دهنده ها رو مجبور به استفاده از معماری خاصی برای استفاده از خودش نمی کنه.میتونه در هر پروژه ای در یک لایه بالاتر از هر REST API  ارائه بشه و همچنین میتونه با هر ابزار مدیریت API  دیگه ای کار کنه.

معایب استفاده از GraphQL

  1. در ابتدا شاید برای توسعه دهندگانی که پیش از این با REST API  ها کار کردن، یک مقدار پیچیده به نظر بیاد.
  2. بیشتر کار با query  ها به سمت سرور منتقل میشه که ممکنه باعث پیچیدگی زیادی برای توسعه دهندگان سرور بشه.
  3. بسته به نوع پیاده سازی اون، ممکنه استراتژی های مدیریت API  مختلفی رو در مقایسه با REST API  نیاز داشته باشه به ویژه زمانی که از نرخ محدودیت یا قیمت گذاری استفاده می کنیم.
  4. Caching  پیچیده تری نسبت به REST API  ها داره.
  5. نگهدارنده های API  ،، وظایف متعدد بیشتری برای نوشتن Schema های قابل نگهداری دارن.

مروری بر یک query از GraphQL : 

برای دک بهتر GraphQL  پیشنهاد من به شما اینه که این مثال رو با دقت نگاه کنین. این 3 تا مثال ساده از وبسایت رسمی graphql.org  براتون ارائه شده.
تو اولین مثال میبینین که چطوری یک کلاینت یه GraphQl query   رو ساختارشو ایجاد می کنه. از API  درخواست میکنه که داده مورد نظرشو در قالب زیر بهش تحویل بده :

{
  me {
    name
  }
}

حالا GraphQl  ما، باید یه خروجی به شکل و شمایل زیر با فرمت JSON  برگردونه :

{
  "me": {
    "name": "Dorothy"
  }
}

راستی، میتونیم یه سری ورودی هم به عنوان آرگومان به query هامون بدیم :

{
  human(id: "1000") {
    name
    location
  }
}

که نتیجه خروجی باید به شکل زیر از GraphQL دریافت بشه :

{
  "data": {
    "human": {
      "name": "Dorothy,
      "location": "Kansas"
    }
  }
}

GraphQL در ابتدا توسط Facebook  توسعه داده شد که درسال 2012، در اپلیکیشن های موبایلی مورد استفاده قرار می گرفت. در سال 2015 به صورت متن باز در اختیار عموم قرار گرفت که اکنون نیز تحت نظارت GraphQL Foundation  می باشد.