Когда сервисы начинают общаться чаще, чем с внешним миром, REST уступает место RPC с контрактом: .proto-файл описывает методы и сообщения, кодогенерация даёт типы, а фреймворк — транспорт. В мире Go два главных имени: канонический gRPC-Go и Connect от команды Buf, который переосмысляет тот же контракт для современного веба.
gRPC-Go — референсная реализация: HTTP/2-мультиплексирование, четыре вида стриминга, перехватчики, балансировка и канальные учётные данные (channel credentials). Это максимум скорости и самая богатая экосистема в родном для gRPC окружении — сервис-меш, метрики и трассировка из коробки. Обратная сторона — клиент должен говорить gRPC: из браузера напрямую не выйдет, нужен gRPC-Web и транс-кодирующий прокси.
Connect (Buf) берёт контракт protobuf, но исполняет его поверх обычных HTTP-семантик: тот же сервис работает как нативный gRPC, как gRPC-Web и как простая POST-библиотека с JSON. Один Connect-хендлер на сервере обслуживает все три протокола, поэтому браузер вызывает API без прокси, curl остаётся рабочим инструментом, а совместимость с существующими gRPC-клиентами сохраняется. Генерация кода через protoc-plugin или buf CLI ощущается современнее: меньше шаблонного кода, лучше ошибки.
Практическое правило: если у вас уже стоит сервис-меш и все вызовы — между Go-сервисами, gRPC-Go даст привычный максимум. Если API заканчивается в браузере или вы хотите curl-отлаживаемые эндпоинты без двойного стека — Connect закрывает вопрос одной библиотекой. Оба подхода разобраны в наших курсах gRPC-Go и Connect по 25 уроков.