gRPC
یک فریمورک متنباز و کارآمد است
که قابلیت فراخوانی پروسیجر از راه دور (RPC) را بین اپلیکیشنهای
درحال اجرا روی سیستمهای مختلف فراهم میکند. به بیان ساده، به کمک gRPC ، اپلیکیشنها میتوانند
به گونهای باهم ارتباط برقرار کنند که انگار در یک پردازش یکسان اجرا میشوند.
این موضوع، در مواقعی که اپلیکیشنها بهصورت فیزیکی رو سیستمهای مختلفی قرار
داشته باشند نیز صادق است. شایان ذکر است که فریمورک gRPC از Google Remote
Procedure Calls برگرفته شده و توسط شرکت گوگل توسعه داده شده
است.
بارزترین
ویژگی های gRPC به شرح زیر است:
gRPC از
زبانهای برنامهنویسی مختلفی ازجمله Node.js ،Dart ،Objective-C، سی شارپ (#C)، سی (C)، سی پلاس پلاس (++C)، جاوا (Java)، پایتون (Python) و روبی
(Ruby) پشتیبانی میکند. پشتیبانی قدرتمند از مشهورترین
زبانها، برقراری ارتباط میان سرویسهای ساختهشده توسط آنها را سادهسازی میکند.
در شرایطی که gRPC از زبان برنامهنویسی موردنظرتان پشتیبانی نمیکند، میتوانید از
کتابخانههای شخص ثالث یا پیادهسازی راهحلهای سفارشی بهعنوان
رویکرد جایگزین بهرهمند شوید.
gRPC دارای
یک ساختار مشخص است و به کمک آن، تعامل میان اپلیکیشنها تسهیل داده میشود. سؤال
مهم این است که منظور از مهمترین کامپوننتهای gRPC چیست ؟ موارد زیر، بهعنوان
اجزای کلیدی این فریمورک به حساب میآیند:
Protobuf یا
همان Protocol Buffers، بهعنوان بخش بنیادی برای ارتباط gRPC عمل میکند و به کمک آن، سرویسها و ساختمانهای داده (Data Structures) در قالب
Languages Agnostic تعریف میشوند. به این
ترتیب، تضمین میشود که این موارد برروی انواع زبانهای برنامهنویسی سازگار
باشند. علاوهبر این، هر زبان حاوی کامپایلر یا
Generator خاص خود است که بهواسطه آن، تعاریف Protobuf به کدهای مخصوص زبان برنامهنویسی مذکور ترجمه میشوند. این کد
تولیدشده به اموری مانند Serialization و Deserialization دادهها
رسیدگی کرده و تبادل سریع دادهها بین سرویسها را امکانپذیر خواهد کرد.
اهمیت
سرویس ها در gRPC چیست ؟ در پاسخ به این سؤال میتوان گفت که در این کامپوننت، تعریفهای RPC و پیادهسازیهای سرور حائز اهمیت هستند. درحقیقت، سرویسها متدهایی
را تعریف میکنند که مشابه زبانهای سنتی، امکان فراخوانی (Invoke) آنها
بهصورت از راه دور فراهم باشد. هر متد دارای یک نام، پارامترهای ورودی و نوع
خروجی است که تمامیشان در تعریف Protobuf تعیین شدهاند. سرور، متدهای
تعریفشده سرویس را برای رسیدگی به درخواستهای دریافتی و تولید پاسخ پیادهسازی
میکند.
کلاینتها
از Stub های تولیدشده برای ارائه متدهایی استفاده میکنند که با متدهای سرویس
از راه دور مرتبط هستند. به کمک Stub ها، جزئیات ارتباطات، مانند جمعآوری
دادهها در قالب
Protobuf،
ارسال درخواستها روی شبکه و دریافت پاسخ، بررسی میشوند. علاوهبر این، Client ها Invoke کردن
متدها را روی Stub انجام میدهد؛ به این طریق، پارامترهای ورودی مهم ارائه میشوند. Stub وظیفه ارسال درخواست به سرور و دریافت پاسخ را برعهده دارد و یک رابط
آشنا به منطق اپلیکیشن نشان میدهد. بهطور کلی، میتوان این کامپوننت را به دو
مرحله مهم، یعنی Stub
Generation و Method Invocation دستهبندی کرد.
این
فریمورک از
HTTP/2 برای انتقال کارآمد دادهها استفاده میکند.
پروتکل
HTTP/2 مزیتهای گوناگونی شامل فشردهسازی Header،
انتقال چندتایی پیغامها (Multiplexing) و Server Push را
دارا است. به همین دلیل، در مقایسه با HTTP/1.1 سرعت ارتباط بالاتر خواهد
بود.
میتوان gRPC را با مکانیزمهای امنیتی خاصی مانند TLS یکپارچهسازی کرد تا
خیالتان از بابت امن بودن ارتباط میان سرویسها راحت باشد. این امر از محرمانهبودن
و یکپارچگی دادهها در حین انتقال محافظت میکند.
خوشبختانه
میتوان از gRPC در اپلیکیشنهای ASP.NET Core استفاده
کرد و از مزیتهای ساخت میکروسرویسهای مقیاسپذیر و کارآمد بهرهمند شد. در ادامه
طی چند مرحله، یکی از روشهای استفاده از این پروتکل در پروژههای دات نت کور بررسی
میکنیم.
با
دنبال کردن موارد فوق و در نظر داشتن معیار جانبی مؤثر در این مسیر، امکان یکپارچهسازی gRPC در ASP.NET Core برای شما فراهم خواهد شد.
gRPC در
سناریوهای خاص مزیتهای قابل توجهی از خود به نمایش گذاشته است؛ با این وجود، بعید
است که gRPC جایگزین همهمنظورهای برای Rest API محسوب
شود. هر دوی آنها جایگاه مخصوص به خود را در دنیای API دارا هستند. در عمل، gRPC در سناریوهای بلادرنگ و
پرفورمنسمحور تجلی میکند و REST API برای مواقعی مناسب است که
سادگی و سازگاری گسترده موردنیاز است.
gRPC مبتنیبر RPC است و اپلیکیشنها در آن، بهصورت مستقیم امکان فرخوانی متدها روی
سرویسهای ریموت را دارند؛ این عمل به گونهای انجام میشود که انگار متدها توابع
محلی هستند. در صورتی که در REST API، دادهها مانند منابعی درنظر گرفته میشوند که میتوان اموری
همچون دسترسی و دستکاری آنها را انجام داد. در این فرآیند از متدهای استاندارد HTTP، شامل GET ،POST ،PUT و DELETE استفاده
میشود.
بهطور
کلی، gRPC
و REST
API، هردو
نقاط ضعف و قوت خود را دارند و میتوان آنها را در سناریوهای متفاوت و برای ساخت API به کار برد. در شرایطی که کارایی و عملکرد، اولویت بالاتری نسبت به
سایر معیارها داشته باشد، gRPC انتخاب مناسبی است؛ زیرا بهواسطه
وجود ویژگیهای همچون خنثی بودن به زبان، RPC و
قابلیت Streaming، میتوان آن را برای اپلیکیشنهای بلادرنگ و
میکروسرویس
(Microservice) به بهترین شکل استفاده کرد. ازسوی دیگر، REST API برای مواقعی مناسب است که
سادگی و انعطافپذیری بالا مدنظر است؛ به همین دلیل است که REST API برای API های مناسب کاربرد عمومی و سازگاری وسیعتری مطلوب است.
Postman یک
اپلیکیشن نرمافزاری مشهور است که برای توسعه، تست و مدیریت API ها به کار میرود.
این نرمافزار، بهدلیل دارابودن رابط کاربرپسند، برای توسعهدهندگان ابزار مناسبی
محسوب میشود. در ادامه، گامهای لازم برای تست gRPC در Postman لیست شدهاند:
1.
ایجاد
یک درخواست gRPC جدید
2.
تعریف
پیام درخواست
3.
ارسال
درخواست و مشاهده پاسخ
4.
امکان
ویرایش
Header های درخواست و پاسخ (انتخابی)
5.
ذخیرهسازی
مقادیر با قابلیت استفاده مجدد (مانند
توکنهای احراز هویت و URL های سرور)
6.
سازماندهی
درخواستهای gRPC در مجموعهها و فولدرها (انتخابی)