وقتی REST به اندازهی کافی سریع نیست
gRPC یک فریمورک ارتباطی است که توسط گوگل توسعه یافته و برای ارتباط بین سرویسها (بهویژه ارتباط داخلی بین میکروسرویسها) بسیار محبوب است. برخلاف REST که معمولاً از JSON روی HTTP/1.1 استفاده میکند، gRPC از فرمت باینری فشرده به نام Protocol Buffers (protobuf) روی HTTP/2 استفاده میکند که سریعتر، کمحجمتر و کارآمدتر است.
در gRPC، ابتدا قرارداد سرویس در یک فایل .proto تعریف میشود:
syntax = "proto3";
service ProductService {
rpc GetProduct (ProductRequest) returns (ProductResponse);
}
message ProductRequest {
string product_id = 1;
}
message ProductResponse {
string name = 1;
double price = 2;
}
از روی این فایل، ابزار protobuf بهصورت خودکار کد کلاینت و سرور را برای زبانهای مختلف تولید میکند؛ این یعنی سرویس نوشتهشده به Go میتواند بهراحتی با سرویسی به زبان پایتون یا جاوا از طریق قرارداد مشترک ارتباط برقرار کند، بدون نگرانی دربارهی فرمت پیام.
چه زمانی gRPC و چه زمانی REST؟
gRPC برای ارتباط داخلی پرحجم و حساس به تأخیر بین میکروسرویسها (سرویس به سرویس) گزینهی بهتری است، بهخصوص وقتی کارایی اهمیت زیادی دارد. اما REST به دلیل خوانایی و سازگاری با مرورگر، همچنان انتخاب رایجتر برای APIهای رو به کلاینت (سرویس به رابط کاربری یا اپلیکیشن موبایل) است. بسیاری از سیستمهای واقعی از هر دو بهصورت ترکیبی استفاده میکنند.