آنچه در این صفحه می خوانید:
- معرفی GraphQL
- کاربرد GraphQL
- ویژگی های GraphQL
- مقایسه GraphQL با REST
- پایتون و GraphQL
- ASP.NET Core و GraphQL
- پی اچ پی و GraphQL
- گو (GO) و GraphQL
معرفی GraphQL
GraphQL یک زبان پرس و جو برای API ها و ران تایم جهت انجام کوئری با داده های موجود است. GraphQL توضیحی کامل و قابل درک از داده های موجود در API شما را فراهم می کند، به کلاینت ها این قدرت را می دهد که دقیقاً آنچه را که لازم دارند را بدست آورند و چیز دیگری جستجو نکنند. تکامل API ها را با گذشت زمان آسان تر می کند و ابزارهای قدرتمند توسعه دهنده را امکان پذیر می کند. GraphQL توسط فیس بوک در سال 2012 توسعه یافته است. در 7 نوامبر 2018، پروژه GraphQL از فیس بوک به بنیاد تازه تأسیس GraphQL، در مراسمی که به میزبانی بنیاد لینوکس برگزار شد، منتقل شد. از سال 2012، ظهور GraphQL به دنبال جدول زمانی اتخاذ است که توسط لی بایرون، خالق GraphQL، با دقت تعجب آور تنظیم شده است. هدف بایرون این است که GraphQL همه جا را در سیستم عامل های وب معرفی کند.
این یک روش کارآمد، قدرتمند و انعطاف پذیر را برای توسعه API های وب فراهم می کند و با REST و سایر معماری های وب سرویس مقایسه شده است. همچنین این امکان را به کلاینت ها می دهد تا ساختار داده های مورد نیاز را تعریف کنند و دقیقاً همان ساختار داده ها از سرور بازگردانده می شود، بنابراین از برگشت زیاد مقادیر داده جلوگیری می شود، اما این پیامدهایی در اثربخشی ذخیره سازی وب از نتایج جستجو دارد. انعطاف پذیری و غنای زبان پرس و جو نیز پیچیدگی هایی را اضافه می کند که شاید برای API های ساده ارزشمند نباشد. سرورهای GraphQL برای چندین زبان مختلف از جمله هسکل (Haskell)، جاوااسکریپت (JavaScript)، روبی (Ruby)، پرل (Perl)، پایتون (Python)، جاوا (Java)، سی شارپ (#C)، اسکالا (Scala)، گو (Go)، الیکسیر (Elixir)، ارلنگ (Erlang)، پی اچ پی (PHP)، آر (R) و کلوژر (Clojure) در دسترس هستند.
کاربرد GraphQL
آنچه را لازم دارید بپرسید و دقیقاً همان را بدست آورید. یک کوئری GraphQL را به API خود ارسال کنید و دقیقاً چیزی را که نیاز دارید بدون کم و بیش دریافت کنید. کوئری GraphQL همیشه نتایج قابل پیش بینی را برمی گرداند. برنامه هایی که از GraphQL استفاده می کنند سریع و پایدار هستند زیرا داده های دریافت شده را کنترل می کنند نه سرور. در یک درخواست واحد منابع زیادی را کسب کنید. کوئری GraphQL نه تنها به خصوصیات یک منبع دسترسی دارد بلکه به راحتی هماهنگی بین منابع را دنبال می کند. در حالی که رست (REST API) معمولی نیاز به دانلود از چندین آدرس اینترنتی دارند، API های GraphQL تمام داده هایی را که برنامه شما در یک درخواست واحد نیاز دارد دریافت می کنند. برنامه هایی که از GraphQL استفاده می کنند حتی می توانند در دیتای شبکه با سرعت پایین تلفن همراه سریع باشند.
API های GraphQL از نظر انواع اصطلاحات و فیلدها سازماندهی می شوند نه از نظر نقاط پایانی و همچنین دسترسی به قابلیت های کامل داده های خود را از یک نقطه پایانی واحد فراهم می آورد. GraphQL از اصطلاحات استفاده می کند تا اطمینان حاصل شود که برنامه ها فقط چیزی که ممکن و قابل فراهم کردن است را بپرسند و خطاهای روشن و مفیدی را ارائه دهد. برنامه ها می توانند از انواع مختلفی برای جلوگیری از نوشتن کد تجزیه دستی استفاده کنند.
ویژگی های GraphQL
شکل داده را تعریف کنید: اولین چیزی که توجه خواهید کرد این است که پاسخ نمایش داده شده در GraphQL کاملا شفاف است. این امر باعث می شود پیش بینی شکل داده های برگشت داده شده از پرس و جو و همچنین نوشتن یک پرس و جو در صورت اطلاع از داده های برنامه شما، آسان شود. مهمتر از همه، این امر یادگیری و استفاده از GraphQL را بسیار آسان می کند. GraphQL به طرز غیرقانونی با الزامات داده های محصولات و طراحان و توسعه دهندگان سازنده آنها ایجاد می شود.
سلسله مراتبی: یکی دیگر از جنبه های مهم GraphQL ماهیت سلسله مراتبی آن است. GraphQL به طور طبیعی روابط بین اشیاء را دنبال می کند، جایی که یک سرویس RESTful ممکن است به چندین سفر دور (با فشرده سازی منابع در شبکه های تلفن همراه) در اس کیوال (SQL) نیاز داشته باشد. این سلسله مراتب داده ها به خوبی با فروشگاه های داده ساختار یافته و در نهایت با رابط های کاربر سلسله مراتبی، در داخل استفاده می شود.
به شدت تایپ شده: هر سطح از یک عبارت GraphQL با یک نوع خاص مطابقت دارد و هر نوع مجموعه ای از زمینه های موجود را توصیف می کند. مشابه SQL، این به GraphQL اجازه می دهد تا قبل از اجرای کوئری، پیام های خطای توصیفی ارائه دهد.
پروتکل، نه ذخیره سازی: هر قسمت GraphQL در سرور توسط هر عملکرد دلخواه پشتیبانی می شود. GraphQL مجبور بود از این کار موجود سود ببرد تا مفید باشد و بنابراین هیچ فضای ذخیره سازی را پشتیبانی یا دیکته نمی کند. در عوض، GraphQL از کد موجود شما استفاده می کند.
درون گرا: سرور GraphQL می تواند برای انواع پشتیبانی شده از آن پرس و جو را انجام دهد. این یک بستر قدرتمند برای ابزارها و نرم افزارهای مشتری ایجاد می کند تا در بالای این اطلاعات مانند تولید کد به زبان های استاتیک تایپ شده، رله یا IDE مانند GraphiQL قرار گیرد. GraphiQL به توسعه دهندگان كمك می كند بدون API كردن كد یا درگیری با cURL،API را به سرعت یاد بگیرند و اكتشاف كنند.
نسخه رایگان: شکل داده های برگشتی کاملاً توسط کوئری مشتری تعیین می شود، بنابراین سرورها ساده تر می شوند. هنگامی که ویژگی های محصول جدید را اضافه می کنید، زمینه های اضافی می تواند به سرور اضافه شود و مشتریان قبلی را تحت تأثیر قرار ندهد. هنگامی که شما ویژگی های قدیمی را حذف می کنید، زمینه های سرور مربوطه می توانند از بین بروند اما همچنان به عملکرد خود ادامه دهند. این روند تدریجی سازگار با عقب، نیاز به تعداد نسخه های افزاینده را برطرف می کند.
مقایسه GraphQL با REST
REST و GraphQL دو راه برای ارسال اطلاعات از طریق HTTP هستند. رویکرد مبتنی بر REST روشی سنتی برای انجام این کار است و در سال های گذشته در بسیاری از برنامه های کاربردی نرخ پذیرش بسیار بالایی کسب کرده است. GraphQL اغلب به عنوان روشی جدید انقلابی برای تفکر در مورد API ارائه می شود. در واقع GraphQL قادر به غلبه بر کاستی های اصلی REST است. تفاوت های بین هر دو فناوری را با یک مثال بررسی می کنیم و می توانید درک کنید که چگونه GraphQL به شما در ساخت API های بسیار انعطاف پذیر برای برنامه ها کمک می کند.
REST و محدودیت هایش
REST یک معماری با طراحی API است که برای اجرای سرویس های وب استفاده می شود. وب سرویس های سازگار با REST به سیستم های متقاضی اجازه می دهد تا با استفاده از یک مجموعه یکنواخت و از پیش تعریف شده، به بازنمایی های متنی از منابع وب دسترسی داشته باشند. هنگامی که از HTTP استفاده می شود، متداول ترین عملیات موجود GET،POST،PUT و DELETE است. مفهوم اصلی REST این است که همه چیز یک منبع است. در حالی که REST برای اولین بار یک راه حل عالی بود، اما موضوعات بسیار مهمی وجود دارد که در حال حاضر معماری از آن رنج می برد. بیایید برخی از مهمترین محدودیت های REST را بررسی کنیم.
برنامه های وب و موبایل امروزه اغلب مبتنی بر داده ها هستند و نیاز به مجموعه های بزرگی از داده ها برای ترکیب منابع مرتبط دارند. دسترسی به این داده ها با استفاده از یک API مبتنی بر REST، که مستلزم انجام چندین سفر دور برای جمع آوری هر آنچه مورد نیاز است، می باشد. به عنوان مثال، تصور کنید که می خواهید اطلاعاتی را از یک نهاد پست درخواست کنید. در همان زمان، می خواهید اطلاعات مربوط به نویسنده پست را دریافت کنید. به طور معمول این کار با ارسال دو درخواست به REST API (به عنوان مثال با استفاده از HTTP GET) انجام می شود. ابتدا شی پست را بازیابی کنید و دوم برای بازیابی شی کاربر.نقاط پایانی برای پست ها و کاربران:
- mydomain.com/posts/:id
- mydomain.com/users/:id
یکی دیگر از مشکلات شایع در استفاده از خدمات RESTful، مشکل سربار بیش از حد است. بنابراین دقیقاً به چه معنی است؟ بیایید به مثال قبلی برگردیم. با استفاده از نقطه پایانی mydomain.com/posts/:id ما در حال دریافت اطلاعات برای یک پست خاص هستیم. هر پست ممکن است دارای خصوصیات زیر باشد: شناسه، عنوان، کاربر و بدنه. مجموعه کامل داده ها را همیشه بر می گردانید. هیچ راهی برای محدود کردن پاسخ فقط شامل یک زیر مجموعه از داده ها مانند عنوان و کاربر وجود ندارد.
GraphQL یک رویکرد متفاوت
به عنوان REST،GraphQL یک معماری با طراحی API است، اما با رویکردی متفاوت که انعطاف پذیر است. اصلی ترین و مهمترین تفاوت این است که GraphQL با منابع اختصاصی سروکار ندارد. در عوض، همه چیز به عنوان یک نمودار در نظر گرفته می شود و بنابراین به هم وصل می شوند. این بدان معنی است که شما می توانید با استفاده از زبان پرس و جو GraphQL و توصیف آنچه می خواهید به عنوان پاسخ دریافت کنید، درخواست (کوئری) را به نیازهای دقیق خود تنظیم کنید. شما می توانید واحدهای مختلف را در یک کوئری ترکیب کنید و می توانید مشخص کنید که کدام ویژگی ها باید در پاسخ در هر سطح شامل شوند، به عنوان مثال:
{
post(id: 1) {
title
user {
name
email
courses {
title
}
}
}
}
نتیجه گیری
هر دو، REST و GraphQL، معماری طراحی API هستند که می تواند برای ساخت سرویس های وب برای برنامه های کاربردی مبتنی بر داده استفاده شود.در اینجا تفاوت اصلی بین این دو مفهوم را یاد گرفته اید. رویکرد RESTful همیشه محدود به مقابله با منابع واحد است. اگر به داده هایی نیاز دارید که از دو یا چند منبع (مانند پست ها و کاربران) حاصل شده باشد، باید سفرهای چند مرحله ای به سرور انجام دهید. علاوه بر این، درخواست های REST همیشه مجموعه ای کامل از داده هایی را که برای یک منبع خاص در دسترس است قرار می دهد. هیچ راهی برای محدود کردن درخواست فقط برای بازیابی زیر مجموعه های زمینه های داده وجود ندارد.
رویکرد GraphQL بسیار انعطاف پذیر تر است و قادر به غلبه بر کاستی های اصلی REST است که در این اینجا نشان داده شد. با استفاده از زبان جستجوی GraphQL می توانید دقیقاً پاسخ مناسب را ببینید. شما می توانید مشخص کنید که کدام قسمت ها باید درج شوند تا پاسخ به داده های مورد نیاز محدود شود. علاوه بر این، می توانید از نمودار استفاده کرده و واحدهای متصل را در یک پرس و جو داده Graph ترکیب کنید.
پایتون و GraphQL
پایتون یک زبان همه منظوره و هدفمند است که برای ایجاد راه حل از API وب تا هوش مصنوعی استفاده می شود. Python زبان برنامه نویسی سطح بالا، تفسیر شده، تعاملی و شی گرا است. به شدت قابل خواندن است و غالبا پایتون از کلمات کلیدی انگلیسی استفاده می کند در حالیکه زبان های دیگر از روش های نقطه گذاری استفاده می کنند. همچنین python دارای ساختارهای syntactical کمتری نسبت به سایر زبان ها است. پایتون مفسر است بدین معنی که در زمان اجرا توسط مترجم پردازش می شود و لازم نیست قبل از اجرای آن برنامه خود را کامپایل کنید.
این جامعه دوست داشتنی است، اقلیت ها را تقویت می کند و باعث می شود همه احساس استقبال کنند. یکی از مشهورترین کتابخانه های آن جنگو، فریمورک وب برای کمال گرایان است. این امکان را به شما می دهد تا به سرعت نمونه سازی کنید و برنامه های کامل وب را با کد کمتری بسازید. نکته اینکه Graphene و Graphene-Django وجود دارند که یک API ساده و قدرتمند را برای ایجاد سرورهای GraphQL در معرض نمایش می گذارند.
ASP.NET Core و GraphQL
ASP.NET یک فریمورک توسعه وب محبوب برای ساخت برنامه های وب بر روی پلتفرم NET. است. ASP.NET Core نسخه اوپن سورس ASP.NET است که بر روی macOS،Linux و Windows اجرا می شود. ASP.NET Core برای اولین بار در سال 2016 منتشر شد و طراحی مجدد نسخه های اولیه و تنها Windows-ASP.NET است. این فریمورک با بازنویسی کامل است که ASP.NET MVC و APP.NET را که قبلاً جداگانه بودند در یک مدل برنامه نویسی واحد متحد می کند. علی رغم اینکه یک فریمورک جدید است، که بر روی یک پشته وب جدید ساخته شده است، اما از سازگاری مفهومی با ASP.NET برخوردار است. برنامه های اصلی ASP.NET Core از نسخه های جانبی در کنار هم پشتیبانی می کنند که در آن برنامه های مختلف، در حال اجرا با همان دستگاه، می توانند نسخه های مختلف ASP.NET Core را هدف قرار دهند. این قابلیت با نسخه های قبلی ASP.NET امکان پذیر نیست.
GraphQL این امکان را به شما می دهد تا با فرانت اند برای اطلاعات بک اند که مذاکره کنید. همچنین برنامه سازنده API را قادر می سازد داده ها را از API های مختلف جمع کند. این یک فناوری بسیار جالب است و فقط مربوط به JavaScript نیست، قطعاً می توانید از آن برای پروژه خود در دات نت استفاده کنید.
پی اچ پی و GraphQL
پی اچ پی (PHP) یک زبان برنامه نویسی شی گرا و اوپن سورس است که برای طراحی وب توسعه یافته است اما می توان از آن به عنوان یک زبان عمومی نیز استفاده کرد. تا ژانویه سال ۲۰۱۳ میلادی پیاچ پی بر روی ۲۴۴ میلیون وب سایت و 2.1 میلیون وب سرور نصب شدهاست. در ابتدا پیاچ پی از عبارت صفحه خانگی شخصی( Personal Home Page) گرفته شده بود اما اکنون این کلمه مخفف Hypertext Preprocessor به معنی پیشپردازنده ابرمتن میباشد.
این زبان برنامه نویسی بر پایه زبان C نوشته شده و یک زبان Cross-Platfrom است و بر روی سیستم عامل های مختلف (ویندوز، لینوکس، یونیکس، مک OS X، و غیره) قابل اجرا است و همچنین قابلیت نصب آن به صورت یک شل جداگانه بر روی تقریباً تمامی سیستمهای عامل و پلتفرمها یا سکوها وجود دارد. پی اچ پی تقریبا با تمام سرورهای مورد استفاده امروز (آپاچی، IISو غیره) سازگار است و از طیف گسترده ای از پایگاه های داده نیز پشتیبانی می کند. کدهای پیاچ پی توسط یک سرور وب که پیاچ پی بر روی آن نصب باشد، تفسیر میشوند. دستورهای این زبان میتوانند به صورت مستقیم در درون کدهای HTML قرار بگیرند.
Graphql-php یک اجرای کامل از ویژگی های GraphQL در PHP (5.5+، 7.0+) است. در ابتدا با اجرای مرجع جاوا اسکریپت منتشر شده توسط Facebook الهام گرفته شده بود. این کتابخانه یک بند نازک در اطراف لایه داده های موجود و منطق تجارت شما است. دیجیتال نحوه اجرای این لایه ها یا موتورهای ذخیره سازی مورد استفاده قرار نمی گیرد. در عوض، ابزارهایی برای ایجاد API غنی برای برنامه موجود شما فراهم می کند.
گو (GO) و GraphQL
گو (GO)، همچنین با نام Golang شناخته می شود، یک زبان برنامه نویسی با استاتیک تایپ شده و طراحی شده در گوگل توسط رابرت گریسمر، راب پیک و کن تامپسون است. Go از لحاظ نحو شبیه سی است، اما با امنیت حافظه، زباله روبی، تایپ ساختاری، و همزمانی با سبک CSP همراه است.
GraphQL نه تنها برای برنامه های فرانت اند بلکه برای ساختن یک لایه داده ای است که دیتابیس های مختلف را محاصره می کند استفاده می شود. از آنجا که Go از نوع امنیتی و همزمانی خوبی برخوردار است، اجرای سرور GraphQL در Go منطقی است. با استفاده از Graphql-go، پیاده سازی GraphQL برای Go / Golang را می توانید انجام دهید.