REST، GraphQL و gRPC سه تکنولوژی محبوب برای توسعه API ها در برنامههای وب مدرن هستن. با این حال، انتخاب یکی از اونها کار سختی هست و هرکدوم ویژگیها و معایب منحصر به فردی دارن که با توجه به نوع اپلیکیشن ما ممکنه انتخاب مناسب یا کاملا نامناسبی باشن.
در این مقاله، مزایا و معایب REST، GraphQL و gRPC را با هم مقایسه میکنیم تا بیشتر با این تکنولوژِی ها آشنا بشیم و همچنین بررسی کنیم که هرکدوم برای چه مواقعی مناسب هستن تا بتونیم بهترین گزینه را برای پروژه هامون انتخاب کنیم.
REST :
محبوبترین تکنولوژی توسعهی API در توسعهی وب مدرن هستش و به جرعت میشه گفت همه ما باهاش آشنایی داریم . Rest یک معماری State-less برای انتقال داده فراهم میکنه به طوری که برخلاف تکنولوژی هایی مثل websokcet درخواستهای کلاینت شامل تمام جزئیات مورد نیاز برای انجام درخواست هستن و سرور state کلاینت رو نگهداری نمیکنه.
APIهای REST از هدرهای مربوط به کش کردن HTTP پشتیبانی میکنند و از متودهای HTTP (POST، GET، PUT، PATCH و DELETE) برای تغییر دیتا استفاده میکنن. هرکسی میتونه به راحتی با REST شروع به کار کردن کنه به این دلیل که بسیار ساده هستش وبه راحتی میشه یاد گرفت.
همچنین، REST به راحتی قابل مقیاسپذیری و بالغ هست بنابراین توسعهدهنده ها میتونن بدون هیچ شکی اون رو توی برنامههای خودشون استفاده کنن. حتی شرکتهایی بزرگی مثل توییتر، پیپال و گوگل از APIهای REST توی محصولات خودشون استفاده میکنن.
مزایای REST
- شما میتونید با استفاده از HTTP verbs عملیات CRUD را به راحتی پیادهسازی کنید.
- REST برای مدت طولانی وجود داشته و تقریباً هر برنامهنویسی میدونه چطور از اونها استفاده کنه.
- قابلیت کش در HTTP رو پشتیبانی میکند. (به وسیله هدر cache-control و Expires)
- قابل مقیاسپذیری هسا و جداسازی بین کلاینت و سرور رو فراهم میکنه.
- میتونیم اون رو به سادگی با برنامههای متعددی ادغام کنیم.
معایب REST
- مشکلات over and under fetching داره.( اطلاعات بیشتر یا کمتر از مورد نیاز دریافت کنیم )
- قادر به حفظ state نیست.
- اندازه دیتا های منتقل شده زیاد هست. ( دیتا به فرمت json منتقل میشه )
- تعداد end-point ها با بزرگ تر شدن پروژه به طور قابل توجهی افزایش پیدا میکنه.
چه زمانی از REST استفاده کنیم
Rest برای مواقعی که نیازهای خاصی نداشته باشیم بسیار مناسبه . به عنوان مثال، اگر تازه به توسعه وارد شدید، استفاده از REST کاملا گزینه مناسبیه به این دلیل که یادگیریش بسیار آسونه و علاوه بر این، یک اکوسیستم بزرگ داره و شما به راحتی میتونید راه حلهایی برای هر مشکلی که با اون روبهرو میشید، پیدا کنید.
همچنین، اگه تعداد درخواستهای زیاد و پهنای باند محدود دارید، بهتره از REST استفاده کنید به این دلیل که میتونید با استفاده از قابلیت کش کردن ، عملکرد رو در چنین شرایطی بهبود بخشید.
در کل، ما نمیتونیم استفاده از REST را به نوع خاصی از برنامهها محدود کنیم. به طورکلی ما در همه مواقع میتوانیم از REST استفاده کنیم مگر درحالتی که اپلیکیشن شما به صراحت نیاز به GraphQL یا gRPC داشته باشه.
GraphQL:
GraphQL یک استاندارد مبتنی بر کلاینت و یک زبان کوئری داده هست که در سال 2015 معرفی شده. GraphQL به توسعهدهنده این اجازه رو میده تا دقیقاً دادههای مورد نیاز خودش رو مشخص و دریافت کنه و برخلاف Rest رویکردی کلاینت محور داره که در اون کلاینت تصمیم میگیره که دادههای مورد نیازش چی هست و چگونه و به چه شکل اون هارو دریافت کنه. همچنین، این روش به حل مشکلات over and under fetching پاسخ میده به این دلیل که مشتری میتونه داده مورد نیاز خودش رو مشخص کنه و دقیقا همون اطلاعات رو دریافت کنه.
GraphQL تغییرات دیتا رو به سه روش انجام میده:
- Queries : دریافت اطلاعات
- Mutations : تغییر دیتای سرور
- Subscriptions : دریافت اطلاعات بروز از سروس
گیتهاب یکی از بزرگترین شرکتهایی هست که از GraphQL استفاده میکنه. در سال 2016، معماری API های خودشون رو ازREST به GraphQL تغییر دادن و به طور قابل توجهی به رشد گیتهاب کمک کرد.
مزایای GraphQL
- بسیار انعطافپذیه و دقیقاً اطلاعاتی که کلاینت نیاز داره رو ارائه میده.
- هیچ over and under fetching ندارد.(دیتا بیشتر یا کمتر از مورد نیاز ارسال نمیشه)
- از زبانهای معروفی مانند جاوا اسکریپت، جاوا، پایتون، روبی، PHP و... پشتیبانی میکنه.
- امکان تغییر داده در سمت سرور را فراهم میکنه.
- قابلیت شخصی سازی ساختار داده رو فراهم میکنه.
- با تنها یک کوئری میتونیم از چندیدن سورس اطلاعات دریافت کنیم.
معایب GraphQL
- یادگیریش سخت تر از Rest هست .
- نیاز به ابزار و کتابخانههای مخصوص برای اجرا و پشتیبانی از GraphQL داره.
- به صورت ذاتی قابلیت کش کردن نداره .
- از آپلود فایل پشتیبانی نمیکنه .
چه زمانی از GraphQL استفاده کنیم
اگر شما نیاز به انعطافپذیری بیشتر در مورد درخواستها و پاسخهای API خودتون دارید و نمیخواهید over and under fetching داشته باشید. همچنین، اگه به دادههای مشخص خاصی از چندیدن سورس نیاز دارید و میخواهید بیشترین بهرهوری را از دریافت دادهها ببریدGraphQL میتونه گزینهی مناسبی باشه.
gRPC:
یک تکنولوژی نسبتا جدید که محبوبیتش رو مدیون معماری Microservice در بک اند هست .gRPC یک سیستم پروتکل مبتنی بر RPC هست که توسط گوگل توسعه داده شده . gRPC بر خلاف Rest و GraphQL از پروتکل HTTP/2 برای انتقال داده استفاده میکنه و عملکرد بسیار بهتری داره.
gRPC به ما این اجازه رو میده تا دیتا رو با فرمت protocol buffers بین سرور و کلاینت ارسال کنیم. این روش بسیار کارآمدی هستش و قابلیت هایی مثل پشتیبانی از توزیع بار، مدیریت خطا و موارد دیگه رو در اختیار ما قرار میده.
مزایای gRPC
- منبع باز (open source)
- انتقال اطلاعات به صورت باینری
- عملکرد بسیار سریع و کارآمد با استفاده از پروتکل HTTP/2
- پشتیبانی از چندین زبان برنامه نویسی از جمله جاوا، سی پلاس پلاس، جاوا اسکریپت و... ( Polyglot )
- قابلیت استفاده از توزیع بار برای بهبود عملکرد سیستم. ( load-balancing )
- سریعتر از Rest به علت استفاده از HTTP2
- قابلیت پیشرفتهی مدیریت خطا و تست واحد.
- پشتیبانی از ارتباط جریانی دوسویه. ( full-duplex streaming )
معایب gRPC
- قابلیت استفاده محدودتر در مقایسه با REST و GraphQL. برای مثال مرورگرها از این تکنولوژی پشتیبانی نمیکنن.
- یادگیری نسبتا سخت.
چه زمانی از gRPC استفاده کنیم
استفاده اصلی gRPC برای Cross-Service Communication هست و به طور کلی اگه شما به دنبال عملکرد بسیار سریع و کارآمد و امکانات پیشرفته مانند توزیع بار و مدیریت خطا هستید . همچنین، اگر تیم شما از زبانهای برنامهنویسی مختلف استفاده میکنه و میخواهید یک پروتکل تعاملی و قابل اطمینان داشته باشید، gRPC میتواند گزینهی مناسبی باشه.
----------------------------
ما توی این مقاله در مورد سه تا از محبوب ترین تکنولوژی های توسعه API، مزایا و معایب هرکدوم صحبت کردیم. امیدوارم REST، GraphQL و gRPC را بهتر درک کرده باشید تا بهترین ابزار رو برای اپلیکیشن خودتون انتخاب کنید.
با این حال، توجه به این نکته بسیار مهمه که ما نمیتونیم بین این تکنولوژی ها مقایسه برتری انجام بدیم به این دلیل که هر کدوم ویژگی های منحصر به فردی دارن و شما باید بر اساس نیاز پروژه یک یا چند تا از این تکنولوژی هارو رو انتخاب کنید.
امیدوارم این مقاله برای شما مفید بوده باشد
با تشکر فراوان!!!