gRPC
RPC с явным контрактом
gRPC позволяет описать сервис и его сообщения в файле Protocol Buffers, а затем сгенерировать клиентский и серверный код для выбранных языков. Клиент вызывает удалённую операцию через типизированный stub вместо ручной сборки HTTP-запроса.
syntax = "proto3";
service UserService {
rpc GetUser (GetUserRequest) returns (UserReply);
}
message GetUserRequest {
int64 id = 1;
}
message UserReply {
int64 id = 1;
string name = 2;
}
Контракт используется для генерации кода
Из одного .proto файла инструменты создают классы сообщений и интерфейсы вызова.
Это уменьшает количество ручного кода сериализации и помогает обнаруживать несовместимые изменения раньше.
gRPC обычно передаёт бинарные Protocol Buffers поверх HTTP/2. Сообщения компактны, а постоянное соединение хорошо подходит для частых внутренних вызовов между сервисами.
Не только один запрос — один ответ
Помимо обычного unary-вызова gRPC поддерживает потоковую передачу сообщений от сервера, от клиента или в обе стороны. Это полезно, когда данные естественно приходят последовательностью и не хочется создавать отдельный HTTP-запрос на каждый элемент.