GraphQL چیست؟ و چه زمانی باید استفاده کنیم؟

درود خدمت شما . چند روزی هست که تبلیغات های مربوط به GraphQL روی اکانت توییتر من خیلی نمایش می ده قبلا هم دنبالش رفتم ببنیم چی هست ولی این سری منو جذب کرده بفهمم .

سوال اصلی من اینکه به زبان ساده این دقیقا چی هست ؟ و چه زمانی ما نیاز داریم ؟

من سایتشو خوندم متوجه شدم آی پی آی های ساده می ده و در توسعه کمک کی کنه

و این مطلب رو خوندم که هیچی متوجه نشدم

سایت دوم خیلی موارد رو نامفهوم نوشته به نظرم یا من بخاطر ضعف در زبان انگلیسی این مشکل رو دارم اگر دوستان زحمت بکشند به زبان ساده بگند دقیقا چه کاربردی داره و در چه زمانی ممنون می شم تشکر

2 Likes

GraphQL به صورت خلاصه یه روشی برای گرفتن و ثبت اطلاعات از یه API هست. همون کاری رو انجام می ده که REST انجام می ده. و به نظر من خیلی هم بهتر. در کل به این شکل هست که کلاینت دیتا ای رو که نیاز داره توضیح می ده و سرور دیتا رو به اون شکلی که در خواست شده بر می گردونه. بسیار کار رو برای هر دو طرف ساده تر و کوئری های کاملتری می شه باهاش زد. همه این ها هم تو یه request می ره و تو یه response بر می گرده . در مقایسه باREST که باید برای هر چیزی که می خوای باید یه request زد.

الان دیگه خیلی جا افتاده. حالا چه خود GraphQL چه فن آوری های مشابهش. و بشدت پیشنهاد می کنم که استفاده کنی.
بد نسیت به ابزار های مثل Relay و Falcor هم نگاهی بندازی که به خوبی با GraphQL کار می کنن

5 Likes

فکر میکنم این عکس خیلی بهت کمک کنه!
در ادامه توضیحات سمیر.

5 Likes

درود . اول از شما و دوست عزیزمون @drpc خیلی ممنونم .

همین برامو سوال شده که ما هرچی می خواهیم مثلا یک درخواست براش ارسال می کنیم دقیقا کجا نیاز هست که از این استفاده کنیم ؟

همین تصویری که دوستمون قرار دادند خوب من در سمت کاربری ریلیشن می زنم و اطلاعات کامنت رو با یک درخواست همراه همون مطلب می یارم .

اینو کمی قشنگ درک نکردم تو یک مثال واقعی وب سرویس مخصوصا موبایل که خیلی کارم روی اونه چه نیازی پیدا می کنم.

1 Likes

join رو که بالاخره نیاز خواهی داشت اما فرقش تو تعداد request هاست و دیتا ای که برمیگرده. مثلا تو REST کلاینت کنترلی روی دیتا بازگشتی نداره اما تو GraphQL می تونه دقیقا بگه که چی می خواد. این جوری دیگه frontend از backend کلا جدا می شه و دیگه پیشن نیاز چندانی به هم ندارن و توسعه راحت تر می شه

2 Likes

تیم ما برای اپ موبایلمون از graphql استفاده می‌کنه، برای سمت سرور از zeit/micro + apollo-server و طرف کلاینت هم از react- native + apollo-client استفاده می‌کنیم. وقتی شروع کردیم هیچ تجربه‌ای با graphql نداشتیم و بین jsonapi و graphql دو به شک بودیم، قبلا با jsonapi کار کرده بودیم و تجربه خوبی هم ازش داشتیم، به نظرم تنها مشکلی jsonapi داره اینه که برای سمت کلاینتش کتابخونه‌‌های زیادی نیست و باید خودت store سمت کلاینت رو پیاده‌سازی کنی (جدیدا جستجو نکردم شاید کتابخونه‌‌های جدید براش اومده باشه)، ولی برای graphql اینطور نیست و برای مثال apollo یک کتابخونه بسیار قدرتمند هستش، مخصوصا اگه سمت کلاینتتون react باشه خودش تقریبا همه کارای store با استفاده از redux انجام می‌ده و شما کار زیاد لازم نیست انجام بدین.
شاید به جز apollo گزینه‌های دیگه‌ای هم اومده باشه که ما ازش خبر نداریم، شاید با کمی جستجو گزینه‌های بهتری هم پیدا کنید.

خوبی‌های graphql:

  • فقط یدونه endpoint دارید.
  • کانفیگ زیادی نداره.
  • خود graphql با استفاده از schema که براش تعریف می‌کنید همه ورودی و خروجی‌هارو چک می‌کنه که هم از نظر امنیت خیلی کمک می‌کنه و هم جلوی اتفاق افتادن بعضی مشکلات لاجیکی رو می‌گیره.
  • سریع می‌تونید یه سرویس رو با استفاده از کتابخونه‌های موجود اجرا کنید.
  • توی دیتا خیلی صرفه‌جویی می‌شه، که خیلی توی اپ‌های موبایل مهمه.

بدی‌های graphql:

  • برای authenticate کاربر راه مشخصی وجود نداره، بعضی راهکارهایی که با جستجو پیدا می‌کنید ممکنه سمت کلاینت رو الکی خیلی پیچیده کنه. (ما از این راهکار استفاده می‌کنیم)
  • راهی تمیزی که بشه فایل رو از طریق graphql آپلود کرد وجود نداره و شما احتمالا برای آپلود فایل مجبور می‌شید که یک یا چنتا endpoint دیگه به سرویستون اضافه کنید. راهکارهایی وجود داره، ولی یا خیلی پیچیدن یا خیلی کثیف کاری دارن.
6 Likes

شاید اگه با این سرویس کمی کار کنید یه شناخت خوبی نسبت به graphql پیدا کنید. کلی سرویس دیگه هم هست که با جستجو میتونی پیدا کنید.

شاید خالی از لطف نباشه که بگم خیلی از سرویس‌ها و شرکت‌های معتبر در کنار REST از graphql هم پشتیبانی می‌کنند، مثل github, shopify, facebook, …

3 Likes