GraphQL به بیان ساده یک زبان متن باز Query نویسی API است که در سال 2012 توسط فیس بوک ساخته شده و در سال 2015 به صورت عمومی منتشر شده است، در ادامه شما را مفهوم و کاربرد GraphQL بیشتر آشنا خواهیم کرد، همراه داتیس نتورک باشید.
GraphQL چیست؟
یک زبان Query نویسی و manipulation اوپن سورس برای API ها و یک runtime برای اجرای آن کوئریها با دادههای موجود شما است که با زبان های برنامه نویسی JavaScript, Java, Ruby, Scala ساخته شده است.
GraphQL در سال 2012 توسط فیس بوک ساخته شده و در سال 2015 به صورت عمومی منتشر شده است،
این زبان کوئری نویسی API توضیحات کامل و قابل فهم از دادههای موجود در API شما را فراهم میکند و همچنین به کلاینتها این قدرت را میدهد که دقیقاً همان چیزی که نیاز دارند (و نه چیزی بیشتر) را درخواست نمایند.
این برنامه، APIهای تکامل یافته را با مرور زمان ساده کرده و ابزارهای قدرتمند توسعه دهنده را ایجاد مینماید.
GraphQL در ابتدا در محیط Facebook با هدف رفع نواقص داخلی برنامههای موبایلی توسعه داده شد و از آن پس مورد استفادهی خاص شبکههای اجتماعی قرار گرفت. در نهایت در سال 2015 به صورت open source یا متن باز به جامعهی برنامه نویسان عرضه شد و امروزه به عنوان یک معماری جدید برای API تبدیل شده است.
معایب GraphQL چیست؟
GraphQL نیز مانند هر سرویس دیگری مزایا و معایبی دارد.
در ادامه به چند مورد از مهمترین معایب آن اشاره میکنیم:
GraphQL برخلاف معماری REST از cache پشتیبانی نمیکن.
البته این مورد با استفاده از ابزارهایی مانند relay قابل پوشش است.
اما مانند استاندارد rest کارآمد نیست.
همچنین پیاده سازی GraphQL نسبت به سایر معماریهای API پیچیدهتر است.
برای پیاده سازی GraphQL در سمت سرور نیز باید پکیج هایی را داشته باشیم تا کارمان را سادهتر کنند. برای ارسال درخواست از آنجایی که کاربر باید دقیقا دستور را توصیف کند باید کدهای طولانی و پیچیده ای را به صورت دستی بنویسد که اینکار درصد خطا را افزایش میدهد.
می دانیم که در GraphQL برای درخواست از queryها استفاده میکند در نتیجه باید به درستی با Schema دادهها آشنایی داشته باشیم.
تا وقتی API خود را در اختیار دیگران قرار میدهیم این API را باید آنقدر قوی و ایمن توسعه داده باشیم تا کاربر در حالی که با queryها کار میکند نتواند به راحتی به ساختار داده (Schema) دسترسی داشته باشد و حملات Dos را انجام دهد.
مزایای گراف او ال چیست؟
GraphQL ویژگی هایی دارد که آن را با سایر APIها متمایز میکند.
در ادامه به بیان این ویژگیها میپردازیم:
1- در معماری GraphQL با دادههای زیادی محصور نمیشویم:
client نرم افزاری است که در خواستی را سمت سرور یک سایت یا اپلیکیشن دیگر ارسال میکند.
در مثال فوق client را میتوان سرور سایت 7learn در نظر گرفت.
GraphQL دارای یک رویداد client محور است به این معنی که به client این امکان را میدهد تا از میان انبوهی از دادههای موجود، با یک درخواست یا اصطلاحا یک request در قالب query که به طور دقیق توصیف شده است،
دقیقا اطلاعات یا اصطلاحا response مد نظر خود را بدون هیچ دادهی اضافی به صورت استاندارد JSON دریافت کند.
در نتیجه توسعه دهنده با حجم زیادی از داده محصور نمیشود و با یک درخواست دقیقا به اطلاعات مد نظر خود دست مییابد.
میتوان اینگونه نتیجه گرفت که در معماری GraphQL، پهنای باند کمتری استفاده میشود.
2- در معماری GraphQL با ورژن API کاری نداریم
ساختار GraphQL به گونهای است که در آن ورژن API اهمیتی ندارد.
در نتیجه API توسعه داده شده با GraphQL بدون تغییر نسخهی آن تکامل مییابد و همچنین توسعه دهنده دیگر چالشی برای مدیریت نسخههای مختلف API ندارد .
3- GraphQL انعطاف پذیری بالایی دارد
از آنجایی که کاربر دقیقا دادهای را که احتیاج دارد توصیف کرده و همان داده را، بدون هیچ گونه دادهی اضافی دریافت میکند، این موضوع باعث میشود که API توسعه داده شده با GraphQL انعطاف پذیری بالایی داشته باشد.
4- ساختارGraphQL از واکشی بیش از حد داده جلوگیری میکند
پیشتر گفتیم در GraphQL درخواست به صورت یک query ارسال شده و یک پاسخ مشخص بدون هیچ دادهی اضافی دریافت میشود، منظور از query خاص این است که به کاربر این امکان را میدهد تا خود مشخص کند چه داده و با چه نوع دادهای را میخواهد دریافت کند.
در نتیجه در این ساختار از واکشی بیش از حد داده جلوگیری میشود و هیچ درخواستی چند بار ارسال نمیشود.
منظور از واکشی بیش از حد، یعنی این ویژگی باعث میشود تا از ارسال و دریافت دادههایی که مورد نیاز کاربر نیست، جلوگیری شود یا به حداقل برسد.
به عبارت دیگر کاربر به طور دقیق اطلاعات مورد نیاز را درخواست کرده و API دقیقا همان اطلاعات درخواستی را به صورت کدهای JSON در اختیار سیستم قرار میدهد .
5- ساختار آن strongly typed، است
یکی از مزیتهای این ساختار، strongly typed بودن است.
strongly typed بودن به معنی این است که برای تمامی اشیایی که مورد استفاده قرار میگیرد،
یک نوع دادهای وجود دارد و شما نمیتوانید یک شی را تعریف کنید که نوع دادهای آن مشخص نباشد.
این ساختار مزیتهای زیر را دارد:
- کد قابل پیش بینی
- اعمال شرایط یکسان برای client و server
- استقلال تیمهای توسعه و پیشبرد همزمان آنها
- دیباگ سریع خطاها
6- با GraphQL تیمهای توسعه دهنده میتوانند به صورت همزمان فعالیت کنند
از آنجایی که در GraphQL ورژن بندی API معنایی ندارد، چندین تیم میتوانند به صورت همزمان در یک پروژه فعالیت کنند.
با مثالی روند را بیشتر توضیح میدهیم. شرایطی را در نظر بگیرید که توسعه دهندهی front-end در انتظار انتشار نسخهی نهایی API توسط توسعه دهندهی back-end باشد به دلیل اینکه در GraphQL ورژن بندی API اهمیتی ندارد، توسعه دهندهی front-end میتواند با یک نسخهی ابتدایی از API کار کند و کدها را تست کند بدون اینکه در انتظار کار توسعه دهندهی back-end باشد.
امیدواریم این مقاله برای شما عزیزان مفید بوده باشد.
داتیس نتورک را در شبکه های اجتماعی خصوصا تلگرام و توییتر دنبال کنید.