توسعه وب سرویس (API) با GraphQl
احتمالا تا به این لحظه واژه GraphQl به گوشتون خورده و همیشه این سوال رو از خودتون می پرسید که آیا برای پروژه هایی که در آینده انجام می دهید مناسب هست یا نه !؟ در این مقاله کاملا با ویژگی ها و مزیت های این زبان آشنا خواهید شد و درک خواهید کرد که GraphQl چیست و چگونه می تواند روند توسعه پروژه را برایتان راحت تر و البته کارآمدتر کند.
درآمدی بر GraphQl
GraphQl ساختاری جدید که به شما این امکان را می دهد تا بتوانید یک API را توسعه دهید و جایگزینی است برای APIهایی که با REST توسعه داده شده اند و البته توسعه داده خواهند شد.
ساختاری که توسط facebook در سال 2012 به منظور رفع نواقص داخلی برنامه های موبایلی توسعه داده شد و در نهایت در سال 2015 به صورت open-source در اختیار جامعه برنامه نویس قرار گرفت. با توجه به ساختار کارآمدی که دارد از همان زمان به سرعت به یکی از محبوب ترین راه حل های موجود برای توسعه زیرساخت های نرم افزاری تبدیل شد.
GraphQl یک زبان کوئری نویسی (query language) است که با ساختار خواصی که در اختیار توسعه دهنده قرار می دهد این امکان را فراهم می کند تا client دقیقا آن چیزی را که نیاز دارد از server درخواست کند و از طرفی server در پاسخ به query کلاینت پاسخ مناسب را به صورت JSON ارسال می کند. نکته مهمی که وجود دارد این است که client دقیقا همان چیزی را که نیاز دارد درخواست می کند و فقط همان را در پاسخ دریافت می کند.
چرا GraphQl
پیش از انتخاب هر ساختاری برای توسعه پروژه باید دلایل انتخاب آن را بدانید پس اجازه دهید بفهمیم که چرا GraphQl با نیازهای شما برای توسعه یک API متناسب است.
- تجربه عالی توسعه دهنده
GraphQl مزیت های بزرگی را در مقایسه با گزینه های دیگر برای توسعه API مانند REST ارئه می دهد. نکته جالب توجه برای APIهای توسعه داده شده با GraphQl این است که توسعه دهنده frontend کمترین جالش را برای کار با این نوع API دارد. رویکرد client محور قدرت زیادی را برای client ایجاد می کند تا با توجه به داده های موجود آنچه را که می خواهد دریافت کند.
- خبری از ورژن بندی API نیست !
این مسئله برای بسیاری از توسعه دهندگان تعجب آور است. GraphQl شرایط جدیدی را برای توسعه API در اختیار توسعه دهنده قرار می دهد. از آنجایی که client تنها داده ای را که نیاز دارد درخواست می کند پس API توسعه داده شده با GraphQl انعطاف پذیری بالایی را ارائه می دهد.
هیج ورژن بندی برای API وجود ندارد و افزودن fieldهای بیشتر، تاثیری در درخواست کاربر که از API استفاده می کند و نسخه API ایجاد نمی کند. یعنی چی ؟ توسعه دهنده دیگر چالشی برای مدیریت نسخه های مختلف API ندارد. به همین دلیل API توسعه داده شده با GraphQl بدون تغییر نسخه آن تکامل می یابد.
می تواند گفت اصلاحات در GraphQl API تغییراتی بدون شکست است و این مسئله برای توسعه دهنده مهم است زیرا بدون هیچگونه دغدغه ای کار خود را ادامه می دهد. GraphQl سطحی از انعطاف پذیری را ارائه می دهد که هیج توسعه دهنده ای نظیر آن را در سایر ساختارهای توسعه API ندیده است.
- عملکرد مستقل تیم های توسعه
توسعه API با GraphQl شرایطی را فرآهم می کند که چندین تیم درگیر در پروژه بتوانند به صورت همزمان کار کنند.
آیا شما به عنوان یک توسعه دهنده در این شرایط قرار گرفته اید که توسعه دهنده front-end در انتظار انتشار نسخه نهایی API توسط توسعه دهنده back-end باشد؟
این اتفاق شرایط پیچیده ای را رقم خواهد زد و باعث خواهد شد که پروژه شما در تایمینگ مورد نظر تمام نشود و درنهایت مشکلات دیگری که به وجود خواهد آمد.
اما اصلا نگران نباشید GraphQl شرایط ویژه ای را برای شما به وجود خواهد آورد تا تیم های توسعه frontend و backend بتوانند به طور همزمان روند توسعه را طی کنند.
توسعه دهنده frontend می تواند تنها با یک نسخه ابتدایی از API کار خود را ادامه دهد و کدها را تست کند بدون اینکه در انتظار کار توسعه دهنده backend باشد. تجربه ای دلپذیر بدون اینکه کار هر یک از تیم های توسعه متوقف شود.
واکشی داده های اعلامی
یکی از بزرگترین ویژگی های GraphQl واکشی داده های اعلامی است داده هایی که client درخواست آنها را می دهد.
هیچ درخواستی چندین بار به سرور ارسال نمی شود، دیتا نه بیش از حد واکشی می شود و نه کمتر تنها این مهم است که در درخواستی که ارسال می کنید چه دیتایی را نیاز دارید و تنها همان را دریافت خواهید کرد.
آنچه را که می خواهید نمایش دهید را در قالب یک query و باید یک request دریافت کنید. با این کار از دریافت داده های اضافی و یا کم بودن داده های دریافتی جلوگیری کنید. بنابراین GraphQl دقیقا آنچه را که نیاز دارید و درخواست کرده اید در اختیارتان قرار می دهد.
- ساختار Query
برای درک بهتر این ساختار به مثال های زیر دقت کنید. فرض کنید اپلیکیشنی را توسعه داده اید و می خواهد در این اپلیکیشن به داده های بلاک سایت دسترسی داشته باشید و اطلاعات نویسنده یک مقاله را نمایش دهید. برای ارسال درخواست و دریافت اطلاعات مورد نظر باید یک query مشابه مثال زیر را ارسال کنید.
{ author (id: 6) { name posts (last: 3) { title } topics (last : 3) { name } } }
برای دریافت اطلاعات باید field هایی را مشخص کنیم که در مثال بالا name,post,topic همان فیلدها هستند که خود می تواند اطلاعاتی را با توجه به filed هایی که برای آنها در نظر می گیرید برگردانند. در قالب یک query دقیقا مشخص می کنیم که به چه اطلاعاتی نیاز داریم و درنهایت با ارسال این query نتیجه ای مشابه مثال زیر response می شود.
{ "data" : { "author" : { "name" : "Adhithi Ravichandran", "posts" : [ { title: "React vs. Vue : A Wholesome Comparison"}, { title: "React Lifecycle Methods: A Deep Dive"}, { title: "5 Essential Skills A Frontend Developer Should Possess"} ], "topics" : [ { name: "React and Vue"}, { name: "React"}, { name: "General"} ] } } }
همانطور که در مثال بالا مشاهده می کنید اطلاعات مورد نیاز در قالب JSON برگشت داده می شود و دقیقا همان اطلاعاتی است که درخواست کرده ایم و هیج اطلاعاتی نه بیشتر و نه کمتر در قالب یک درخواست دریافت می شود.
Strongly typed schema
یکی دیگر از دلایلی که چرا باید از GraphQl استفاده کنیم strongly typed بودن GraphQl است و به این معنی است که باید برای تمام objectهایی که مورد استفاده می گیرد یک type وجود داشته باشد. به همین دلیل schema به عنوان یک قرار داد بین client و server عمل می کند. به مثال زیر دقت کنید نمونه ای از تعریف schema در GraphQl را نشان می دهد.
type Person { id : ID name: String age: Int gender: String }
به مثال بالا توجه کنید یک object type به اسم person ایجاد کردیم که شامل fied های مختلفی است که هر کدام type خاص خود را دارند.
در مجموع strongly typed چندین مزیت دارد :
- کد قابل پیشبینی
- اعمال شرایط یکسان برای client و server
- استقلال تیم های توسعه و پیشبرد همزمان
- دیباگ سریع خطاها
نتیجه گیری :
مهم است در شرایطی که ساختارهای مختلفی برای توسعه پروژه های تجاری وجود دارد بهترین ساختار را برای داشتن بهترین هملکرد و کارآیی مورد استفاده قرار دهید تا ضمن پیشبرد اهداف پروژه تجربه لذت بخشی را در کنار سایر تیم هایی که به طور همزمان در روند توسعه پروژه شما را همراهی کرده اند داشته باشید.
GraphQl تمامی شرایط لازم و برای قرار دادن شما در چنین شرایطی را دارد و می تواند به شما در توسعه بهتر پروژه ها کمک کند هرچند که استفاده از یک ابزار خاص به شما و پروژه ای که در نظر دارید آن توسعه دهید بستگی دارد.در این مقاله سعی شد تا به صورت کامل و البته سریع با کلیات GraphQl آشنا شوید.
در نظر داشته باشید که در آینده ای نچندان دوره GraphQl به یکی از گزینه های استخدام در شرکت های IT خواهد شد به همین منظور در آینده ای نزدیک آموزش GraphQl را در سایت قرار خواهیم داده تا شما کاربران عزیز به صورت کامل با جزئیات GraphQl آشنا شوید و بتوانید به راحتی API های خود را توسعه دهید.