مقدمه
تا به حال به این موضوع فکر کردهاید که چرا وقتی اینستاگرام خود را باز میکنید، پستهای جدید در کسری از ثانیه روی صفحه شما ظاهر میشوند؟ یا وقتی به یک فروشگاه آنلاین سر میزنید، محصولات مختلف در یک چشمبرهمزدنی نمایش داده میشوند؟ پاسخ به این سوالات در دنیای API ها پنهان است. در این یادداشت همراه ما باشید تا درباره دو تکنولوژی قدرتمند REST API و GraphQL که قلب تپنده اکثر اپلیکیشنهای موبایل محسوب میشوند صحبت کنیم. اگر میخواهید بدانید کدام یک برای پروژه شما مناسب است و تفاوت REST API و GraphQL چیست، در این یادداشت همراه ما باشید.
REST API چیست؟
برای فهم RESTful API باید اول از همه با معنی API آشنا شویم. API نوعی واسطه یا مترجم بین دو برنامه است. مثلا فرض کنید شما اینستاگرام را باز کردهاید و دارید پستهای اخیر دوستتان را تماشا میکنید. اینستاگرام خودش این پستها را در گوشی شما ذخیره نکرده، بلکه از سرورهایش میخواهد که اطلاعات لازم را برای شما بفرستد. این گفتوگو و درخواست بین اپلیکیشن و سرور فقط از طریق API انجام میشود.
بعد از اینکه با API آشنا شدیم، بیایید ببینیم که RESTful API چیست؟ REST یک روش یا سبک برای توسعه API است. وقتی میگوییم REST API یا RESTful API داریم؛ یعنی آن رابط برنامهنویسی کاربردی یا همان API ما بر اساس قوانین و اصول REST توسعه داده شده است. این قوانین باعث میشود API مورد نظر ما، منظم، قابلفهم و راحت برای استفاده باشد. REST که مخفف “Representational State Transfer” است و در سال 2000 معرفی شد، اکنون به دلیل سادگی و انعطافپذیری آن بسیار محبوب شده است.
بیشتر بخوانید: چطور امنیت داده را در APIهای هوش مصنوعی تضمین کنیم؟
حالا بیایید با یک مثال ساده ببینیم که REST API دقیقا چطور کار میکند؟ فرض کنید شما وارد یک سایت فروشگاهی شدهاید، محصول مورد نظرتان را انتخاب میکنید و روی دکمه «نمایش محصولات» کلیک میکنید. آن سایت خودش این اطلاعات را ذخیره نکرده و از یک سرور میخواهد آن را برای شما بفرستد، اما بهصورت کاملا منظم و در مسیرهای مشخص.
REST API برای اینکه ساختاریافته و منظم عمل کند، از دستورات ساده HTTP استفاده میکند. دستوراتی که میتواند شامل موارد زیر باشد:
- GET برای گرفتن اطلاعات (مثلا درخواست اینکه لیست محصولات را نمایش بده)
- POST برای ساختن چیز جدید (مثلا درخواست اینکه یک محصول جدید بساز)
- PUT برای بهروزرسانی (مثلا درخواست اینکه این محصول را تغییر بده)
- DELETE برای حذف (مثلا درخواست اینکه این محصول را پاک کن)
بیایید برگردیم به همان مثال اول، وقتی در اینستاگرام دارید پست دوستتان را مشاهده میکنید، اپلیکیشن با دستور GET از سرور میخواهد که آن پست را نشان بدهد. البته که REST روی چند اصل کلیدی کار میکند. اصلهایی مانند مسیرهای مشخص، جدایی کامل، بدون حافظه و قابلیت ذخیرهسازی.
با اصل مسیرهای مشخص هر چیزی یک آدرس مخصوص به خودش را دارد. به طور مثال، اطلاعات کاربر همیشه از یک مسیر مشخصی گرفته میشود. در جدایی کامل، اپلیکیشن شما و سرور، مستقل از هم عمل میکنند و فقط از طریق یک درخواست با هم صحبت میکنند. در اصل بدون حافظه، هربار که درخواستی میفرستید، باید کامل باشد و سرور نباید چیزی از دفعه قبل را به خاطر بسپارد، یعنی هر درخواست مثل اولین بار است و طبق اصل قابلیت ذخیرهسازی، دادهها میتوانند موقتا ذخیره شوند تا دفعه بعد سریعتر بیایند.
RESTFUL API چیست؟
اگر اسم RESTFUL API به گوشتان رسیده باشد؛ باید بدانید که تفاوت خاصی بین REST API و RESTful API وجود ندارد و این دو در واقع اسم متفاوت برای یک چیز هستند. به عنوان مثال فرض کنید یک دستور پخت مشخص برای درست کردن کیک دارید، آرد، تخممرغ و شکر که در دمای 180 درجه به مدت 45 دقیقه در فر پخته شود. REST این قوانین و دستورالعملهاست و RESTful کیکی است که طبق این نوع دستور و قوانین پخته شده است.
پس در واقع وقتی یک برنامهنویس میگوید من یک RESTful API ساختم، یعنی از متدهای HTTP مانند GET، POST، PUT، DELETE بهدرستی استفاده کرده، مسیرهای منطقی و مشخصی ساخته و هر درخواست را به صورت کامل و مستقل انجام داده و بهطور کلی، تمام قوانین REST را رعایت کرده است. پس وقتی میگوییم REST بیشتر به خود سبک و قوانین و وقتی میگوییم RESTful به یک API که این قوانین را اجرا کرده اشاره داریم.
GraphQL در توسعه بکاند
GraphQL یک روش جدیدتر و هوشمندتر برای ارتباط بین اپلیکیشن و سرور است و مانند نسل پیشرفتهتری از REST API عمل میکند، با این تفاوت که توسعهدهنده میتواند دقیقا بگوید که من فقط یک تکه از این اطلاعات را میخواهم و نه همه آن را.
بیشتر بخوانید: وب سرویس چیست؟ و چگونه به کمک برنامهنویسها میآید؟
بیایید این موضوع را با یک مثال توضیح دهیم. فرض کنید وارد اپ سفارش غذا شدهاید و میخواهید قیمت غذا را بدانید. در روش REST اپ از سرور، لیست همه غذاها را میخواهد و سرور هم اطلاعات کاملی مانند اسم غذا، عکس غذا، مواد تشکیلدهنده و قیمت را میفرستد. حتی اگر اپ فرضا مواد تشکیلدهنده را نخواهد، سرور اطلاعات اضافی را هم میفرستد؛ اما استفاده از GraphQL در Node.js یا هر پلتفرم دیگری به شما این امکان را میدهد که اگر اپ فقط اطلاعات غذا و نام را بخواهد، سرور فقط همین دو مورد را بهصورت سریع و سبک برمیگرداند، نه بیشتر و نه کمتر!
تفاوت REST و GraphQL چیست؟
حالا برویم سراغ مقایسه GraphQL و REST API تا آن دو را به زبان خیلی ساده و بدون هیچ اصطلاح سختی با هم مقایسه کنیم.
گفتیم که REST یک روش قدیمی و رایج برای ارتباط میان اپلیکیشن و سرور است. اپ از سرور درخواست میفرستد. مثلا: “لیست محصولات را بفرست.” و سرور جواب را بهصورت آماده میدهد؛ اما GraphQL یک روش جدیدتر و منعطفتر است و به اپ دقیقا میگوید که چه اطلاعاتی را میخواهد تا سرور فقط همان را بفرستد، نه بیشتر و نه کمتر.
بیایید با یک مثال خیلی ساده شروع کنیم. REST شبیه یک فستفودی است که منوهای ثابتی دارد. مثلا، منو شماره یک: همبرگر + نوشابه، منو شماره دو: پیتزا + سالاد + دسر. شما اگر فقط همبرگر بخواهید، مجبور هستید یکی از همین منوهای آماده را بردارید، یعنی نوشابه روی آن را هم انتخاب کنید! در این حالت رستوران یا همان سرور تصمیم میگیرد چه چیزی برای شما بیاورد.
اما روش GraphQL مثل این میماند که جلوی شما یک برگه سفید بگذارند و از شما بخواهند که خودتان روی کاغذ بنویسید که دقیقا چه چیزی میخواهید و گارسون هم برای شما دقیقا همان را بیاورد، نه کمتر و نه بیشتر. در این حالت شما میگویید که چه میخواهید، نه رستوران!
بیشتر بخوانید: وب هوک چیست و چه زمانی باید از آن استفاده کنیم؟
در ادامه همراه ما باشید تا به دیگر تفاوتهای مهم میان GraphQL و REST API اشاره کنیم. اولین تفاوت در نحوه دریافت دادههاست. در روش REST وقتی اطلاعات یک محصول را میخواهید، سرور همه اطلاعات مانند اسم، قیمت، عکس، توضیحات و… را میفرستد. پس اگر فقط به یکی از این اطلاعات هم احتیاج داشته باشید، دادههای اضافی دیگر را هم دریافت خواهید کرد و اگر این اطلاعات در منابع مختلف باشد، باید چندین درخواست بفرستید. اما در روش GraphQL این شمایید که دقیقا مشخص میکنید چه فیلدهایی میخواهید و سرور هم همان فیلدها را برایتان میفرستد و همچنین با یک درخواست میتوانید اطلاعات را از چندین منبع مختلف به صورت یکجا دریافت کنید.
به عنوان مثال فرض کنید کاربر میخواهد لیست فیلمها را ببیند و هر فیلم شامل اطلاعاتی است مانند اسم فیلم، امتیاز، بازیگران، کارگردان و تریلر.
در روش REST اپ باید چند مسیر مختلف را صدا بزند:
- movies → برای لیست فیلمها
- actors → برای اطلاعات بازیگران
- directors → برای اطلاعات کارگردان
- trailers → برای تریلرها
سرور هر بار یک تکه از پازل را میفرستد و اپ باید خودش این تکهها را کنار هم بگذارد. یعنی دادهها کامل میشوند، ولی کندتر میرسند و باتری گوشی بیشتر مصرف میشود. اما در روش GraphQL اپ یک سوال مشخص با درخواستهای مشخص را از سرور میپرسد. مثل عنوان و امتیاز فیلم و سرور دقیقا همانها را یکجا میفرستد و هیچ اطلاعات اضافهای مانند کارگردان یا تاریخ ساخت که الان نیاز نداریم را نمیفرستد. در نتیجه درخواست سبکتر میشود و صفحه سریعتر بالا میآید. در ادامه میتوانید چند تفاوت REST API و GraphQL را در جدول زیر مشاهده کنید:
| موضوع | REST API | GraphQL |
| مسیرها (Endpoints) | چند مسیر مختلف دارد (مثل orders، users، products) | فقط یک مسیر دارد. |
| نوع دادهای که برمیگردد | برای گرفتن اطلاعات مختلف به ارسال چند درخواست نیاز داریم. | برای گرفتن اطلاعات مختلف تنها یک درخواست کافی است. |
| انعطافپذیری | کم، نیاز به ساخت مسیرهای جدید است. | خیلی زیاد، هر بار میتوانید اطلاعات متفاوتی بخواهید. |
| سرعت در پروژههای پیچیده | گاهی کند، به دلیل ارسال داده اضافه | سریع، به دلیل ارسال دقیق داده |
| یادگیری و راهاندازی | ساده | پیچیده |
| مناسب برای | پروژههای ساده و معمولی | پروژههای بزرگ و پیچیده |
جمعبندی:
در نهایت میتوانیم بگوییم REST و GraphQL هر دو ابزار قدرتمندی برای ارتباط بین اپلیکیشن و سرور محسوب میشوند، اما از آنجا که «هرکسی را بهر کاری ساختند»، هر کدام از این ابزارها از پس کار متفاوتی برمیآیند. REST که شبیه منوی آماده رستوران است، به دلیل سادگی آن برای پروژههای کوچک مناسب است. اما GraphQL شبیه یک منوی شخصیسازی شده است و به دلیل انعطافپذیری و سرعت بالای آن برای پروژههای بزرگ و پیچیده گزینه مناسبی محسوب میشود. خلاصه که هیچکدام از این ابزارها بهتر و یا بدتر نیستند و انتخاب بین انتخاب بین REST و GraphQL به نیاز پروژه، اندازه تیم، پیچیدگی دادههای شما و نوع محصول مرتبط بستگی دارد.








