GraphQL روشی موثر برای نوشتن API های بهینه
GraphQL یک زبان پرس و جو و یک برنامه اجرایی سمت سرور است که برای توسعه API هایی با امکان اولویت بندی و تحویل داده بهینه به سرویس گیرنده ها استفاده میشود. منظور از اطلاعات بهینه این است که در GraphQL سعی میشود دقیقا همان اطلاعاتی به کلاینت تحویل داده شود که او بدون کم و کاست و سربار اضافی می خواهد.
پیشنهاد شگفت انگیز کدفرند،دسترسی به تمامی دوره های آموزشی کدفرند تنها با ۹۹ هزار تومان
این فن آوری با هدف ارائه API های سریع و انعطاف پذیر و در عین حال مورد قبول توسعه دهندگان توسط شرکت Facebook ارائه شده است.
همچنین برای توسعه API های آن میتوان از IDE مخصوص ایجاد سرویسهای GraphQL به نام GraphiQL استفاده کرد که محیطی ویژه برای نوشتن و اشکالزدایی و تست این API ها فراهم می آورد. در واقع این فن آوری میتواند جایگزینی برای REST API ها باشد چرا که علاوه بر سرعت و دقت تحویل داده در GraphQL نسبت به REST API ها, به توسعه دهندگان امکان میدهد که داده ها را از منابع اطلاعاتی متنوع در یک API واحد ارائه دهند. یکی از نکات برجسته در باره GraphQL این است که, نگهدارندگان API ها در سمت سرور میتوانند در هر زمان، فیلدهایی را به آن اضافه کنند بدون اینکه در ساختار پرس و جو سرویس گیرنده گان تغییر یا اثری بگذارد.
شمای گراف کیوال یا GraphQL Schema چیست؟
توسعه دهندگان API از گراف کیوال برای ایجاد یک شما یا ساختاری نمایشی برای توصیف داده ای که کاربران میتوانند توسط یک پرس و جو از سرور دریافت کنند استفاده می کنند. یک شمای گراف کیوال بر اساس انواع اشیا یا Objects ساخته میشود که نشان میدهند چه نوع آبجکتی با چه نوع فیلدهایی طی یک درخواست میتواند دریافت شود. وقتی یک پرس و جو یا Query از طرف سرویس گیرنده وارد میشود, سرویس دهنده آن را با شمای گراف کیوال مقایسه میکند و سپس آن پرس و جو را اجرا میکند.
مقاله پیشنهادی :: Web Api چیست؟ بررسی و آشنایی با Web Api
Resolver در GraphQL چیست؟
توسعه دهندگان API های GraphQL هر فیلدی که در Schema مشخص کرده اند را با فیلدهای نوشته شده در یک تابع به نام Resolver پیاده سازی میکنند. در هنگام اجرا، این Resolver هست که برای تولید داده خروجی فراخوانی میشود.در این نوع از API ها به جز ساختار نحوی ایجاد و اعتبار سنجی دستورات پرس و جو، تصمیم گیری درباره طراحی باقی موراد بر عهده خود برنامه نویس و تسعه دهنده است. همچنین هیچ اجباری برای نحوه ذخیره سازی داده ها و نوع زبان برنامه نویسی وجود ندارد و در بیشتر زبان های برنام نویسی مانند PHP با کتابخانه graphql-php, جاوااسکریپت با graphql.js و یا python با Graphene Python میتوان آن را توسعه داد و از آن استفاده کرد.
نکته دیگر اینکه گراف کیوال هیچ ملروماتی در نوع شبکه, احراز هویت و صفحه بندی ارائه نمیدهد. از دید کابران استفاده کننده (کلاینت) از API های گراف کیوال بیشتر آنچه باید مورد توجه قرار گیرد عملیات مربوط به نوشتن پرس و جو ها و mutation ها میباشد. اگر فرض کنیم تمام کاری که با یک API راه دور انجام میدهیم شامل مواردی مانند Read,Update,Delete,Create یا همان CRUD باشد، Query ها، مربوط به دستور Read هستند و باقی دستورات شامل بروزرسانی-ایجاد و حذف همان عملیات Mutation میباشد.
پیشنهاد شگفت انگیز کدفرند،دسترسی به تمامی دوره های آموزشی کدفرند تنها با ۹۹ هزار تومان
نقاط قوت و ضعف GraphQL
- Schema یا شمای یک گراف کیوال به علت ارائه یک ساختار واحد برای کل API یکی از نقاط قوت آن محسوب میشود.
- توابع GraphQL بدون سربار اضافی لود میشوند.
- تعرف صریح و ثابت نوع داده ها منجر به ثبات و عدم بروز اشتباهات در استفاده از این نوع API ها میشود.
- کاربران میتوانند قبل از استفاده از API لیستی از انواع داده ها را درخواست کنند.
- توسعه دهندگان میتوانند API نوشته شده را بدون خدشه دار شدن ساختار آن تغییر دهند.
- افزونه های زیادی برای آن در بسترهای مختلف ارائه شده است.
- میتوان GraphQL را روی REST API ها هم توسعه داد.
از طرفی
- فرایند یادگیری آن توسط توسعه دهندگان کمی دشوارتر از انواع API های دیگر به نظر میرسد.
- همچنین بار اصلی عملیات پیجیده را بر عهده سرور میگذارد.
- فرایند کش سازی در آن پیچیده است.
- نوشتن Schema ها برای نشان دادن ساختار API یک فرایند نسبتا وقت گیر محسوب میشود.
نمونه کد زیر از وب سایت رسمی GraphQL به طور خلاصه نحوه استفاده از آن را نشان میدهد:
{ me { name } }
و پاسخ آن از طرف سرور :
{ "me": { "name": "Dorothy" } }
همان مثال با ارائه محدودیت و پارامتر:
{ human(id: "1000") { name location } }
و پاسخ آن :
{ "data": { "human": { "name": "Dorothy, "location": "Kansas" } } }