آموزش GraphQL
آموزش 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
- در یک ارتباط رفت و برگشت ساماندهی میشن. کلاینت ها فقط داده ی درخواستی خودشون رو دریافت می کنن و نه هیچ داده اضافه تری.
- Strongly Data Type های موجود در GraphQL ها باعث کاهش ارتباطات نادرست بین کلاینت ها و سرور ها می شن.
- درون نگر هستن (آقا سخته خدایی، وقتی ترجمه میشن کلا مفهومشون عوض میشه 😊).یعنی کلاینت ها میتونن لیستی از دیتا تایپ های موجود رو درخواست بدن، روشی ایده آل برای تولید خودکار مستندات.
- این امکان رو میدن که بدون دست خوردن و از کار افتادن query های موجود اون ها رو توسعه و تکمیل کنیم.
- اکستنشن های متن باز زیادی برای ارائه ویژگی های مختلفی از GraphQL موجودن که درREST موجود نیستن.
- توسعه دهنده ها رو مجبور به استفاده از معماری خاصی برای استفاده از خودش نمی کنه.میتونه در هر پروژه ای در یک لایه بالاتر از هر REST API ارائه بشه و همچنین میتونه با هر ابزار مدیریت API دیگه ای کار کنه.
معایب استفاده از GraphQL
- در ابتدا شاید برای توسعه دهندگانی که پیش از این با REST API ها کار کردن، یک مقدار پیچیده به نظر بیاد.
- بیشتر کار با query ها به سمت سرور منتقل میشه که ممکنه باعث پیچیدگی زیادی برای توسعه دهندگان سرور بشه.
- بسته به نوع پیاده سازی اون، ممکنه استراتژی های مدیریت API مختلفی رو در مقایسه با REST API نیاز داشته باشه به ویژه زمانی که از نرخ محدودیت یا قیمت گذاری استفاده می کنیم.
- Caching پیچیده تری نسبت به REST API ها داره.
- نگهدارنده های 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 می باشد.