شروع کار با React و GraphQL: راهنمای مبتدی.

GraphQL چیست؟
GraphQL یک زبان پرس و جو برای API ها (واسط های برنامه نویسی کاربردی) است که توسط فیس بوک در سال 2012 توسعه یافت و بعداً در سال 2015 منبع باز شد. این زبان به مشتریان این امکان را می دهد که دقیقاً داده های مورد نیاز خود را درخواست کنند و نه بیشتر، و ارتباط کارآمدتر و انعطاف پذیرتر را بین مشتری ممکن می کند. و سرور برخلاف API های RESTful سنتی، که به چندین نقطه پایانی نیاز دارند و ممکن است داده های بیشتری از حد مورد نیاز را برگردانند، GraphQL یک نقطه پایانی واحد را ارائه می دهد و به مشتریان اجازه می دهد پرس و جوها و جهش های خود را مشخص کنند و در نتیجه پاسخ های سریعتر و قابل پیش بینی تری به دست می دهند. GraphQL همچنین یک سیستم نوع قوی و قابلیت های درون نگری ارائه می دهد که درک و نگهداری API ها را آسان تر می کند.
چرا GraphQL؟
آیا تا به حال متوجه شده اید که برای به دست آوردن داده های دقیق مورد نیاز از یک API دچار مشکل شده اید؟ آیا تا به حال آرزو کردهاید که بتوانید اطلاعات خاصی را که میخواهید بخواهید و آن را در یک درخواست دریافت کنید، بدون اینکه با دادههای اضافی یا چندین نقطه پایانی سروکار داشته باشید؟ اگر چنین است، شما تنها نیستید. معماری سنتی RESTful API محدودیتهای خود را دارد و توسعهدهندگان به دنبال راهی بهتر برای مدیریت واکشی دادهها و مدیریت آنها بودهاند.
چیزی که ما یاد میگیریم
این مقاله یک سری است و این قسمت اول است. بنابراین، اگر با GraphQL تازه کار هستید و می خواهید نحوه استفاده موثر از آن را یاد بگیرید، این راهنمای مبتدی برای شما مناسب است.
در پایان این مجموعه به موارد زیر می پردازیم:
- اصول اولیه GraphQL
- مزایای آن نسبت به REST
- مقایسه پاسخ های GraphQL و Rest API.
- مفاهیم اصلی GraphqL که یک توسعه دهنده frontend باید بداند.
- نحوه راهاندازی، استفاده و واکشی دادهها از GraphQL API با استفاده از کلاینت آپولو در فرانتاند.
همچنین، در پایان این مجموعه، شما درک کاملی از نحوه عملکرد GraphQL خواهید داشت و ما قصد داریم یک پروژه واکنش کوچک بسازیم که داده ها را از یک GraphQL API واکشی می کند و همچنین از برخی از مفاهیمی که می خواهیم در مورد آن بحث کنیم استفاده کنیم. سریال بیا شروع کنیم!
برخی از مفاهیم GraphQL که یک توسعه دهنده باید بداند.
به عنوان یک توسعه دهنده، چند مفهوم از GraphQl وجود دارد که باید بدانید. برخی از آنها در زیر فهرست شده اند.
-
طرحواره: طرحواره GraphQL طرحی است که انواع داده های موجود در API و عملیاتی را که می توان روی آن داده انجام داد را تعریف می کند. پرسوجوها، جهشها و اشتراکهایی را که میتوان در API ایجاد کرد، و همچنین انواع دادههایی را که میتوان برگرداند، تعریف میکند.
-
Query: پرس و جو درخواست داده از API است. در GraphQL، پرس و جوها با استفاده از زبان پرس و جو GraphQL نوشته می شوند و می توان از آنها برای بازیابی داده ها به روشی انعطاف پذیر و کارآمد استفاده کرد. کوئری ها می توانند داده های دقیق مورد نیاز را مشخص کنند و می توانند شامل فیلدهای تودرتو برای بازیابی داده های مرتبط باشند.
-
جهش: جهش درخواستی برای تغییر داده ها در API است. در GraphQL، جهش ها با استفاده از زبان جهش GraphQL نوشته می شوند و می توان از آنها برای ایجاد، به روز رسانی یا حذف داده ها در API استفاده کرد. جهشها میتوانند شامل آرگومانهای ورودی برای تعیین دادههای اصلاح شونده باشند.
-
Resolver: یک Resolver تابعی است که وظیفه حل یک پرس و جو یا جهش را بر عهده دارد. حلکنندهها تعیین میکنند که چگونه دادهها باید بازیابی یا اصلاح شوند و دادههای درخواستی یا تأیید جهش را برمیگردانند. حلکنندهها با انواع خاصی در طرحواره مرتبط هستند و میتوانند به هر زبان برنامهنویسی نوشته شوند.
-
Type: نوع یک شی یا اسکالر تعریف شده در طرحواره GraphQL است. انواع می توانند شامل اشیاء، رابط ها، اتحادیه ها، اسکالرها و enum ها باشند. هر نوع دارای یک یا چند فیلد است که داده های قابل بازیابی یا اصلاح را برای آن نوع تعریف می کند.
-
اشتراک: اشتراک درخواستی برای به روز رسانی داده ها در زمان واقعی از API است. در GraphQL، اشتراکها با استفاده از زبان اشتراک GraphQL نوشته میشوند و میتوان از آنها برای اشتراک در تغییرات داده خاص و دریافت بهروزرسانیها در صورت وقوع استفاده کرد.
با این حال، بهترین روش برای مهندسان فرانت اند است که بدانند چگونه با API های GraphQL تعامل کنند.
مزایای GraphQL نسبت به Rest
GraphQL چندین مزیت نسبت به استراحت دارد که برخی از آنها در زیر ذکر شده است.
-
واکشی کارآمد داده: با REST، هر نقطه پایانی مجموعه ثابتی از داده ها را برمی گرداند، که می تواند منجر به واکشی بیش از حد یا کم واکشی داده شود. در مقابل، GraphQL مشتریان را قادر میسازد فقط دادههای خاصی را که نیاز دارند درخواست کنند و در نتیجه واکشی دادهها سریعتر و کارآمدتر میشود.
-
کاهش ترافیک شبکه: API های RESTful ممکن است به درخواست های متعدد برای واکشی تمام داده های لازم نیاز داشته باشند، در حالی که GraphQL امکان بازیابی همه داده های مورد نیاز را در یک درخواست واحد فراهم می کند و ترافیک کلی شبکه را کاهش می دهد.
-
تجربه توسعهدهنده بهبود یافته: GraphQL طرحی با تایپ قوی ارائه میکند که امکان توسعه و درک آسانتر API را فراهم میکند. همچنین از درون نگری پشتیبانی می کند که امکان تولید اسناد خودکار، بررسی نوع و کاوش API را فراهم می کند.
-
انعطافپذیری: ماهیت انعطافپذیر و پویا GraphQL به مشتریان اجازه میدهد تا کوئریها و جهشهای خود را تعریف کنند و یک API قابل تنظیم و سازگارتر را ممکن میسازد.
-
دادههای بیدرنگ: اشتراکهای GraphQL بهروزرسانیهای بیدرنگ دادهها را امکانپذیر میکند و تجربه کاربری تعاملیتر و پاسخگوتری را ارائه میدهد.
معایب GraphQL در مقایسه با Rest.
در حالی که GraphQL مزایای زیادی نسبت به API های RESTful سنتی دارد، چند معایب احتمالی وجود دارد که باید در نظر گرفت:
-
پیچیدگی: تنظیم و استفاده از GraphQL در مقایسه با API های RESTful، به ویژه برای توسعه دهندگانی که با این فناوری آشنایی ندارند، می تواند پیچیده تر باشد. این نیاز به رویکرد متفاوتی برای مدلسازی دادهها دارد و پیادهسازی آن میتواند دشوارتر باشد.
-
ذخیره سازی: با RESTful API، مشتریان می توانند از مزیت حافظه پنهان HTTP استفاده کنند، که می تواند به کاهش بار سرور و بهبود عملکرد کمک کند. با GraphQL، کش به دلیل ماهیت پویای پرس و جوها می تواند چالش برانگیزتر باشد و زمانی که داده ها به طور مکرر به روز می شوند، کش می تواند کمتر موثر باشد.
-
بار سرور: پرس و جوهای GraphQL می توانند پیچیده تر و از نظر محاسباتی فشرده تر از درخواست های RESTful API باشند، که می تواند منجر به بارگذاری سرور بیشتر و زمان پاسخ آهسته تر شود، به خصوص اگر پرس و جوها بهینه سازی نشده باشند یا مشتریان حجم زیادی از داده را درخواست کنند.
-
ابزارسازی: در حالی که کتابخانه ها و ابزارهای زیادی برای کار با GraphQL وجود دارد، اکوسیستم به اندازه API های RESTful بالغ نیست. این میتواند یافتن منابع و راهحلها را در هنگام بروز مشکلات دشوارتر کند.
علیرغم این معایب احتمالی، بسیاری از توسعه دهندگان دریافته اند که مزایای GraphQL بسیار بیشتر از هر گونه اشکالی است. مانند هر فناوری دیگری، ارزیابی دقیق مزایا و معایب آن و تعیین اینکه آیا GraphQL انتخاب مناسبی برای استفاده خاص شما است یا خیر، مهم است.
به طور کلی، GraphQL در مقایسه با API های RESTful سنتی، راه کارآمدتر، انعطاف پذیرتر و سازگارتر با توسعه دهندگان را برای تعامل با API ها ارائه می دهد.
مقایسه بازیابی داده از API GraphQL و Rest API.
همانطور که قبلا توضیح دادیم، پاسخهای دریافتشده از GraphQL API و Rest API کاملاً متفاوت هستند، زیرا GraphQL API دادههای خاصی را به ما میدهد، و این به این دلیل است که هنگام واکشی دادهها از GraphQL API، باید مشخص کنیم fields
که می خواهیم و با انجام این کار فقط برای فیلدهای درخواست شده داده ها را برمی گرداند. از طرف دیگر، یک Rest API هم دادههایی را که نیاز داریم و هم دادههایی را که نیاز نداریم به ما میدهد. برای درک واضح می توانیم تصاویر زیر را بررسی کنیم.
تصویر بالا نمونه ای از کوئری GraphQL و پاسخ آن است.
تصویر بالا نمونه ای از پاسخ از Rest API است.
نتیجه
تا اینجای کار در این قسمت اول مجموعه، توانسته ایم موارد زیر را پوشش دهیم.
- مقدمه ای بر GraphQL
- چرا باید از GraphQL استفاده کنیم
- مزایای GraphQL API نسبت به Rest API.
- معایب GraphQL API در مقایسه با Rest API.
- ما برخی از مفاهیم اصلی GraphQL را فهرست کردیم.
- ما پاسخهای هر دو GraphQL و Rest API را مقایسه کردیم
به طور خلاصه، GraphQL یک فناوری هیجان انگیز و امیدوارکننده است که ارزش کاوش را دارد، به ویژه برای توسعه دهندگانی که به دنبال ساخت برنامه های کاربردی مدرن، کارآمد و مقیاس پذیر هستند.
منبع
https://graphql.org/learn/queries/
مراقب قسمت بعدی این مجموعه باشید که در آن به مفاهیم اصلی GraphQL با توضیحات و مثالهای دقیق میپردازیم.