Ответ
gRPC (Google Remote Procedure Call) — это высокопроизводительный фреймворк для удаленного вызова процедур (RPC), разработанный Google. Он позволяет клиентскому приложению напрямую вызывать методы на серверном приложении, как если бы это был локальный объект.
Ключевые отличия от REST:
- Протокол: gRPC работает поверх HTTP/2, который поддерживает мультиплексирование (несколько запросов в одном соединении) и потоковую передачу данных (streaming). REST обычно использует HTTP/1.1.
- Формат данных: gRPC использует Protocol Buffers (Protobuf) — бинарный формат сериализации. Он компактнее и быстрее, чем текстовый JSON, используемый в REST.
- Контракт (API Schema): В gRPC API строго определяется в
.proto
файлах (IDL - Interface Definition Language). Это позволяет генерировать клиентский и серверный код, обеспечивая строгую типизацию. В REST для этого используется OpenAPI/Swagger, но его применение не является обязательным. - Типы взаимодействия: gRPC нативно поддерживает 4 типа коммуникации:
- Унарный (запрос-ответ, как в REST)
- Серверный стриминг (клиент отправляет запрос, сервер отвечает потоком данных)
- Клиентский стриминг (клиент отправляет поток данных, сервер отвечает одним сообщением)
- Двунаправленный стриминг
Пример определения сервиса в greeter.proto
:
// Версия синтаксиса
syntax = "proto3";
// Определение сервиса
service Greeter {
// Унарный RPC-метод
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// Структура запроса
message HelloRequest {
string name = 1;
}
// Структура ответа
message HelloReply {
string message = 1;
}
Вывод: gRPC предпочтительнее для внутренних коммуникаций между микросервисами, где важны производительность и строгие контракты, в то время как REST остается стандартом для публичных API благодаря своей простоте и человекочитаемости.