gRPC  یک فریمورک متن‌باز و کارآمد است که قابلیت فراخوانی پروسیجر از راه دور (RPC) را بین اپلیکیشن‌های درحال اجرا روی سیستم‌های مختلف فراهم می‌کند. به بیان ساده، به کمک gRPC ، اپلیکیشن‌ها می‌توانند به گونه‌ای باهم ارتباط برقرار کنند که انگار در یک پردازش یکسان اجرا می‌شوند. این موضوع، در مواقعی که اپلیکیشن‌ها به‌صورت فیزیکی رو سیستم‌های مختلفی قرار داشته باشند نیز صادق است. شایان ذکر است که فریمورک gRPC از Google Remote Procedure Calls برگرفته شده و توسط شرکت گوگل توسعه داده شده است.

 

ویژگی های gRPC چیست ؟

بارزترین ویژگی های gRPC به شرح زیر است:

فریم‌ورک gRPC از چه زبان هایی پشتیبانی می کنند؟

gRPC  از زبان‌های برنامه‌نویسی مختلفی ازجمله Node.js ،Dart ،Objective-C، سی شارپ (#C)، سی (C)، سی پلاس پلاس (++C)، جاوا (Java)، پایتون (Python) و روبی (Ruby) پشتیبانی می‌کند. پشتیبانی قدرتمند از مشهور‌ترین زبان‌ها، برقراری ارتباط میان سرویس‌های ساخته‌شده توسط آن‌ها را ساده‌سازی می‌کند. در شرایطی که gRPC از زبان برنامه‌نویسی موردنظرتان پشتیبانی نمی‌کند، می‌توانید از کتابخانه‌های شخص ثالث یا پیاده‌سازی راه‌حل‌‌های سفارشی به‌عنوان رویکرد جایگزین بهره‌مند شوید.

ساختار gRPC چگونه است؟

gRPC  دارای یک ساختار مشخص است و به کمک آن، تعامل میان اپلیکیشن‌ها تسهیل داده می‌شود. سؤال مهم این است که منظور از مهم‌ترین کامپوننت‌های gRPC چیست ؟ موارد زیر، به‌عنوان اجزای کلیدی این فریمورک به حساب می‌‌آیند

1-     پروتکل بافر

Protobuf  یا همان Protocol Buffers، به‌عنوان بخش بنیادی برای ارتباط gRPC عمل می‌کند و به کمک آن، سرویس‌ها و ساختمان‌های داده (Data Structures) در قالب Languages Agnostic  تعریف می‌شوند. به این ترتیب، تضمین می‌شود که این موارد برروی انواع زبان‌های برنامه‌نویسی سازگار باشند. علاوه‌بر این، هر زبان حاوی کامپایلر یا Generator خاص خود است که به‌واسطه آن، تعاریف Protobuf به کدهای مخصوص زبان برنامه‌نویسی مذکور ترجمه می‌شوند. این کد تولیدشده به اموری مانند Serialization  و Deserialization داده‌ها رسیدگی کرده و تبادل سریع داده‌ها بین سرویس‌ها را امکان‌پذیر خواهد کرد.

2-     سرویس ها

اهمیت سرویس ها در gRPC چیست ؟ در پاسخ به این سؤال می‌توان گفت که در این کامپوننت، تعریف‌های RPC و پیاده‌سازی‌های سرور حائز اهمیت هستند. درحقیقت، سرویس‌ها متدهایی را تعریف می‌کنند که مشابه زبان‌های سنتی، امکان فراخوانی (Invoke) آن‌ها به‌صورت از راه دور فراهم باشد. هر متد دارای یک نام، پارامترهای ورودی و نوع خروجی است که تمامی‌شان در تعریف Protobuf تعیین شده‌اند. سرور، متدهای تعریف‌شده سرویس را برای رسیدگی به درخواست‌های دریافتی و تولید پاسخ پیاده‌سازی می‌کند.

3-   کلاینت ها (Clients)

کلاینت‌ها از Stub های تولیدشده برای ارائه متدهایی استفاده می‌کنند که با متدهای سرویس از راه دور مرتبط هستند. به کمک Stub ها، جزئیات ارتباطات، مانند جمع‌آوری داده‌ها در قالب Protobuf، ارسال درخواست‌ها روی شبکه و دریافت پاسخ، بررسی می‌شوند. علاوه‌بر این، Client ها Invoke کردن متدها را روی Stub انجام می‌دهد؛ به این طریق، پارامترهای ورودی مهم ارائه می‌شوند. Stub وظیفه ارسال درخواست به سرور و دریافت پاسخ را برعهده دارد و یک رابط آشنا به منطق اپلیکیشن نشان می‌دهد. به‌طور کلی، می‌توان این کامپوننت را به دو مرحله مهم، یعنی Stub Generation و Method Invocation دسته‌بندی کرد.

4-   پروتکل های ارتباطی

این فریمورک از HTTP/2 برای انتقال کارآمد داده‌ها استفاده می‌کند. پروتکل HTTP/2 مزیت‌های گوناگونی شامل فشرده‌سازی Header، انتقال چندتایی پیغام‌ها (Multiplexing) و Server Push را دارا است. به همین دلیل، در مقایسه با HTTP/1.1 سرعت ارتباط بالاتر خواهد بود.

5-   امنیت

می‌توان gRPC را با مکانیزم‌های امنیتی خاصی مانند TLS یکپارچه‌سازی کرد تا خیالتان از بابت امن بودن ارتباط میان سرویس‌ها راحت باشد. این امر از محرمانه‌بودن و یکپارچگی داده‌ها در حین انتقال محافظت می‌کند.

gRPC  در  ASP.NET Core

خوشبختانه می‌توان از gRPC در اپلیکیشن‌های ASP.NET Core استفاده کرد و از مزیت‌های ساخت میکروسرویس‌های مقیاس‌پذیر و کارآمد بهره‌مند شد. در ادامه طی چند مرحله، یکی از روشهای استفاده از این پروتکل در پروژه‌های دات نت کور بررسی می‌کنیم.

 

 

۱- نصب پکیج های NuGet ضروری 

۲- تعریف قراردادهای سرویس

۳- تولید کد کلاینت و سرور 

۴- پیاده سازی منطق سمت سرور

۵- پیکربندی و هاستینگ  gRPC Service

۶- توسعه اپلیکیشن های کلاینت

با دنبال کردن موارد فوق و در نظر داشتن معیار جانبی مؤثر در این مسیر، امکان یکپارچه‌سازی gRPC  در ASP.NET Core برای شما فراهم خواهد شد

 

آیا gRPC جای REST API را می گیرد؟ 

gRPC  در سناریوهای خاص مزیت‌های قابل توجهی از خود به نمایش گذاشته است؛ با این وجود، بعید است که gRPC جایگزین همه‌منظوره‌ای برای Rest API محسوب شود. هر دوی آن‌ها جایگاه مخصوص به خود را در دنیای API دارا هستند. در عمل، gRPC  در سناریوهای بلادرنگ و پرفورمنس‌محور تجلی می‌کند و REST 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 های مناسب کاربرد عمومی و سازگاری وسیع‌تری مطلوب است.

نحوه تست gRPC در  Postman

Postman  یک اپلیکیشن نرم‌افزاری مشهور است که برای توسعه، تست و مدیریت API ها به کار می‌رود. این نرم‌افزار، به‌دلیل دارابودن رابط کاربرپسند، برای توسعه‌دهندگان ابزار مناسبی محسوب می‌‌شود. در ادامه، گام‌های لازم برای تست gRPC در Postman لیست شده‌اند:

1.       ایجاد یک درخواست gRPC جدید

2.     تعریف پیام درخواست

3.    ارسال درخواست و مشاهده پاسخ

4.     امکان ویرایش Header های درخواست و پاسخ (انتخابی)

5.     ذخیره‌سازی مقادیر با قابلیت استفاده مجدد (مانند توکن‌های احراز هویت و URL های سرور)

6.     سازماندهی درخواست‌های gRPC در مجموعه‌ها و فولدرها (انتخابی)