پشتیبانی همزمان از REST و gRPC در ASP.NET Core API
200, OK
https://github.com/mafshin/dotnet-core-api-grpc-rest icon
اکثر برنامه نویسان، به احتمال زیاد تاکنون API‌‌های خود را در قالب REST به مشتریان عرضه کرده اند و هم توسعه دهنده و هم خدمات گیرنده از سادگی استفاده از REST API راضی بوده اند. اما در نقطه ای از فرآیند توسعه خود، به جایی می‌رسیم که علاوه بر سادگی توسعه، Performance نقش پررنگی پیدا می‌کند بخصوص با افزایش تعداد Method‌های API و افزایش تعداد مشتریان، آنجاست که CPU سروری که API ما را هاست می‌کند، گاهی به سقف می‌چسبد، ترافیک شبکه به شدت افزایش می‌یابد و در پاسخ به اینکه آیا شما Go Client یا Python Client هم برای API خود دارید، پاسخی جز "خیر" نداریم. اینجاست که جستجو میکنیم و میبینیم راه‌های زیادی پیش روی ماست، یکی از این راه ها، که برای هر سه نیاز فوق پاسخ مناسبی می‌دهد، gRPC هست. نمونه ای عملیاتی از API ای که REST و gRPC را همزمان با هم پشتیبانی کند، در این مخزن گیت هاب  قرار داده ام که می‌توانید برای مقایسه Performance و حجم اطلاعات تبادل شده با هر دو روش از آن استفاده کنید. در این نمونه کد، با فراخوانی یک سرویس ساده، نتایج زیر به دست آمد:
  • سرعت اجرا (سرویس گیرنده): gRPC تقریبا 5 برابر سریعتر از REST پیام‌ها را دریافت کرد.
  • حجم دیتای انتقالی (سرویس گیرنده): حجم پیام‌های gRPC تقریبا نصف REST بود.
پشتیبانی همزمان از REST و gRPC در ASP.NET Core API
MagicOnion : یک فریمورک Realtime مبتنی بر gRPC و MessagePack
200, OK
https://github.com/Cysharp/MagicOnion icon

این فریمورک با استفاده از قابلیت HTTP/2 Streaming مبتنی بر  gRPC  و بهره گیری از  MessagePack  برای Serialization (همراه با LZ4 integration) بستری قدرتمند را برای ارتباطات Realtime فراهم می‌کند.

یکی از مزایای این فریمورک عدم نیاز به فایل‌های .proto مخصوص gRPC است چرا که از interface های سی شارپی برای به اشتراک گذاری امضای Endpoint‌های موجود بین Server و Client استفاده میکند.

یکی از دیگر مزایای آن پشتیبانی از Swagger و داشتن Json Gateway توکار متبنی بر HTTP/1 است که به کمک آن می‌توان به صورت Json/RESTful نیز API‌ها را فراخوانی کرد.

همچنین این فریمورک از OpenTelemetry پشتیبانی کرده و می‌توانید از برنامه‌های مانیتورینگ مانند Prometheus و StackDriver و Zipkin و... بر روی پروژه خود استفاده کنید و یا توسط Grafana یک داشبورد مانیتورینگ ویژوال و Realtime ایجاد کنید.

این فریمورک ابزار مناسبی جهت ارتباطات بین Microservice‌ها می‌باشد.

همچنین جایگزین مناسبی برای سرویس‌های API based مانند ASP.NET Core WebAPI و WCF بوده و نیز جایگزین مناسبی برای SignalR و Socket.io جهت ارتباطات Realtime می‌باشد.

MagicOnion : یک فریمورک Realtime مبتنی بر gRPC و MessagePack