مهندس پایداری سایت در یکتانت
فرق graphql و rest
الان تقریبا سه ماهی هست که دارم بک اند یک وب اپلیکیشنی رو با graphql توسعه میدم
تو این چند مدت تجربه های جالبی داشتم که میخوام به اشتراک بذارم:
اول درمورد خود graphql حرف بزنم و اینکه از کجا پیداش شده !؟
جریان اینه که تو سال 2015 توسط فیسبوک توسعه داده شده و از اون موقع توی اپلیکیشن های معروفی همچون خود فیسبوک و اینستاگرام و توئیتر و سایر اپلیکیشن ها استفاده شده.
من تو ایران جایی رو ندیدم که ازش استفاده کرده باشن.
تو این مقاله میخوام درمورد فرق هاش با rest یه کم حرف بزنم چون که حس میکنم اینجوری گفتن و فهمش آسون تر باشه.
همونجوری که احتمالا همه میدونن rest یک معماری طراحی api عه که برای گرفتن اطلاعات و دستکاری کردن روی اطلاعات یک دیتابیس که پشت یک وب اپلیکیشن هست استفاده میشه.
معمولا اگه HTTP استفاده کنیم معماری rest چند تا متود معروف داره : GET, POST, PUT, DELETE.
برای گرفتن و query زدن از GET استفاده میشه و معمولا برای ساختن و مودیفای کردن یا همون دست کاری کردن از POST و برای بقیه کاربرد ها که دیگه نمیخوام زیاد واردش بشم.
اینکه rest یک معماری عالیه توش شکی نیست اما خب بعضی از ایراد هایی بهش وارده:
اولین موردش رو میخوام با یک مثال بگم :
فرض کنید دو تا مودل post و user رو توی اپلیکیشنمون داریم بعد میخوایم محتوای یک پست و همزمان با اون نویسنده اون پست که میشه یک یوزر رو هم از سرور بگیریم، کاری که توی rest مجبوریم بکنیم اینه که دو تا ریکوئست به سرور بزنیم با این عنوان ها :
mydomain.com/posts/:id
mydomain.com/users/:id
مورد دوم رو هم میخوام با همین مثال میخوام بگم اونم اینجوری که فرض کنید مودل پست ما چهار تا قسمت داره (title, id, user, body) ما توی کلاینت تو یه قسمت فقط قسمت title رو از پست میخوایم و اگه از همون ریکوئستی تو همین مثال قبل بزنیم کل پستی که میخوایم رو به ما برمیگردونه که خب علی الحساب لازمش نداریم و دیتای اضافی هستش.
اما بریم سراغ graphql :
این دوستمون هم یک نوع معماری برای نوشتن API هستش که بعضا ازش به عنوان یک زبون هم یاد میشه.
کانسپت اصلی این معماری اینه که همه چیز مثل راس های یک گراف هستن که با هم در ارتباطن.
ویژگی مهمی که graphql داره اینه که منعطفه. حالا چجوری ؟
اینجوری که شما میتونید مثلا یک اطلاعاتی رو از سرور بگیرید و دقیقا مشخص کنید که چی میخواید
برای مثال کوئری زیر رو ببینید :
{
post(id: 1) {
title
user {
name
email
courses {
title
}
}
}
}
الان با این کوئری که زدیم ما title و user پستی که آی دی اون 1 هست رو گرفتیم و از یوزرش فقط name و email و courses و از courses فقط قسمت title
همونجوری که میبینید به طرز خیلی قشنگی همه این ها با یک کوئری و ریکوئست به سرور هندل شده :دی
و دیگه لازم نیست برای هر کدوم این ها یک ریکوئست جداگانه به سرور بزنیم.
کلا خیلی چیز های دیگه درمورد این معماری graphql هست که دیگه نمیخوام طولانی کنم این نوشته رو توی نوشته های بعدی ادامه میدم انشالله.
مثل همیشه مشتاق نظرات شما هستم.
منابع :
مطلبی دیگر از این انتشارات
چرا برنامه نویس ها و شرکت ها تمایلی به کار اشتراکی و درصدی ندارند؟
مطلبی دیگر از این انتشارات
بروزرسانی پروژه با CI/CD - قسمت اول
مطلبی دیگر از این انتشارات
رشته های بزرگ در php و مشکلات آنها