ویگن
ویگن
خواندن ۳ دقیقه·۳ سال پیش

گراف کیو ال فرشته نجات یا فقط یک ایده خلاقانه؟!

خب آقا سلام، چطورید؟! من خیلی تلاش کردم تو راهی که این دو سال برای یادگیری برنامه نویسی گذروندم بیام بشینم؛ از بِیس اول، رفرنسا و تریکایی که بلدمو منتشر کنم، شما هم چند مورد بهش اضافه کنید تا باهم بیشتر از قبل یاد بگیریم، ولی خب فعلا ذهنم به گذشته خطور نمی کنه؛ آقا بگذریم، بریم سراغ اصل مطلب - یا تنها چیزی که فعلا تو ذهنم دارم برا ارائه دادن :)

مقدمه: اول از همه سعی میکنیم بفهمیم این گرافِ صورتی رنگ به چه دردی میخوره و چه مزایا یا معایبی نسبت به RESTful داره؛ بعد سعی میکنیم قدم به قدم باهم ی سرور تقریبا کامل به کمک TypeScript و چند پکیج باحال دیگ بسازیم؛ از لینک زیر می‌تونید ریپازیتوری سروری که قراره بهش برسیم رو ببینید؛ البته در طول این سری مقالات باهم تکمیل ترش هم می‌کنیم!

https://github.com/47vigen/fastify-mikro-orm-mercurius-graphql-example

عه، گراف صورتی رنگ!
عه، گراف صورتی رنگ!

بپرس و بگیر!

با زبان های کوئری - یا طبق تعریف ویکی‌پدیا زبان های پرسمان داده - میتونیم، هر چیزی که نیاز داریم رو خیلی دقیق و مرتب از یک پایگاه داده یا سیستم اطلاعاتی، بپرسیم و جوابشو بگیریم. اگر با دیتابیس های رابطه ای کار کرده باشید میدونیم که با زبان کوئری SQL اطلاعاتی که میخوایم رو تعریف میکنیم و دیتابیس در جواب اطلاعاتی که خواستیم رو بهمون میده. حالا یک لطفی کنید این مورد رو تا اینجا نگه دارید بیاید مشکل زیر رو باهم بررسی کنیم:

فکرشو کنید یک بک اند ساده وبلاگی طور میخوایم بزنیم با معماری Rest! دوست عزیز فرانت کارمون میاد بهمون میگه من توی تک صفحه پست ها میخوام به جز اطلاعات مربوط به خود پست، نویسنده و دسته بندیش هم بگیرم! خب میتونیم بهش بگیم اینکارو انجام بده:

  1. یبار درخواست بزن به این اندپوینت خود پست رو بگیر
  2. یبار دیگ درخواست بزن به این یکی اندپوینت دسته‌بندیشو بگیر
  3. یبار دیگ درخواست بزن به فلان اندپوینت نویسندشو بگیر

نه به نظر درست نیست، بیایم یکار دیگ کنیم یک اندپوینت مخصوص برای تک صفحه پست درست می‌کنیم که کل اطلاعاتی که میخواد توش باشه؛ تا اینجا خوبه همه چیز ولی خب اگر مثل این مورد چند بار دیگ اتفاق بیوفته چی؟! یعنی میخوایم برای هر کدوم اندپوینت های مخصوص درست کنیم؟! نه این بَدِههههه!

بالاتر اول درباره زبان های کوئری صحبت کردیم و بعدشم با مشکل اندپوینت های مختلف رو به رو شدیم ولی خب چه ربطی به گراف کیو ال داره؟ شاید بشه گفت حاصل ازدواج یک اندپوینت با یک زبان کوئری در نهایت میشه گراف کیو ال! ایشون در اصل یک زبان کوئری هستند که می‌تونیم باهاش هر چیزی که نیاز داریم رو دقیق تعریف کنیم و اون رو به یک اندپوینت بدیم؛ بعد از درخواست، اندپوینت چیزی رو به ما تحویل میده که براش تعریف کردیم. کاملا داینامیک و منعطف!


بزارید یک نمونه عملی باهم ببینیم در تصویر زیر به آدرس API و اطلاعاتی که درخواست کردیم (سمت چپ) و اطلاعاتی که دریافت کردیم (سمت راست) توجه کنید :

حالا اگر نویسنده این مقاله رو هم بخواهیم چی؟

به سادگی تصاویر بالا میشه از API گراف کیو ال استفاده کرد و نسبت به میزان نیاز از سرور اطلاعاتی که میخوایم رو برداریم، شاید براتون تا همین الان هم جالب بوده باشه ولی اصلا نگران نباشید بزودی باهم یکی میسازیم :)) ولی قبلش بریم یکم بیشتر در مورد خود گراف کیو ال بدونیم! اگر هم خواستید خودتون تست بگیرید از لینک زیر می‌تونید استفاده کنید:

https://venins.ir/graphiql



لی بایرن، بابای گراف کیو ال
لی بایرن، بابای گراف کیو ال

فردی که در تصویر بالا میبینید از سال 2012 یکی از افراد اصلی بوده که روی این پروژه کار کرده و میکنه؛ ایشون تصمیم داره بتونه کمک کنه گراف‌کیواِل کل پلتفرم های وب رو در بر بگیره و خب شاید همین اتفاق هم داره کم کم میوفته! گراف کیو ال در حال حاضر معماری جدیدی برای توسعه APIها است که نسبت معماری رقیب خود - یعنی Rest - خیلی منعطف تر عمل می‌کنه. فیسبوک که شرکت سازنده این تکنولوژیه در سال 2015 این پروژه رو تقدیم دنیای منبع باز کرد و باعث شد به جز خودش، برنامه نویسان و حتی شرکت های بزرگی مثل Shopify از گراف کیو ال استفاده کنند!


گراف کیو ال شاید فقط با یک ایده خلاقانه شروع شده باشه اما در حال حاضر می‌تونه فرشته نجاتی برای معایب معماری Rest باشه؛ البته این مورد هم باید در نظر گرفت که هیچ چیزی بی عیب و نقص نیست پس گراف کیو ال هم میتونه عیوب خودش رو داشته باشه، تو قسمت بعدی به مزایا و معایب گراف صورتی می‌پردازیم :))

graphqlreacttypescriptqueryrest
کوتاه بخوایم بگیم، ویگن هستم برنامه‌نویس فرانت اند و کمی بک!
شاید از این پست‌ها خوشتان بیاید