Как связаны HTTP, gRPC и Protobuf

«Как связаны HTTP, gRPC и Protobuf» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP — это протокол передачи данных, используемый для веб-коммуникаций. gRPC — это фреймворк для удалённого вызова процедур (RPC), который может работать поверх HTTP/2. Protobuf (Protocol Buffers) — это бинарный формат сериализации данных, используемый gRPC по умолчанию для эффективной передачи сообщений.

Пример:

// Определение Protobuf-схемы (message.proto)
message Request {
  string query = 1;
}

message Response {
  string result = 1;
}

service SearchService {
  rpc Search(Request) returns (Response);
}

В gRPC клиент и сервер обмениваются бинарными Protobuf-сообщениями через HTTP/2, что даёт преимущества в скорости и размере данных по сравнению с JSON-over-HTTP.