فرق 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 هست که دیگه نمیخوام طولانی کنم این نوشته رو توی نوشته های بعدی ادامه میدم انشالله.

مثل همیشه مشتاق نظرات شما هستم.


منابع :

https://medium.com/codingthesmartway-com-blog/rest-vs-graphql-418eac2e3083#targetText=Both%2C%20REST%20and%20GraphQL%2C%20are,to%20deal%20with%20single%20resources.

https://graphql.org/


اولین بازار API ایرانی

اَپی اِکو اولین API مارکت ایرانی، پلتفرمی هوشمند برای دسترسی به API های ایرانی و خارجی است. در این بستر شما می‌توانید به صدها API کاربردی دسترسی داشته و از آنها در توسعه نرم افزار استفاده کنید.

مشاهده وب سرویس ها