Вопрос «REST или gRPC» — самый частый архитектурный спор Go-бэкенда, и в отличие от выбора между роутерами, здесь решается не вкус, а периметр системы. REST — это стиль поверх привычного HTTP с JSON: запросы читаются глазами, отладка начинается с curl, а клиентом может быть что угодно, включая браузер. gRPC — это RPC-фреймворк на HTTP/2 и protobuf: контракт описан в .proto-файле, код клиента и сервера генерируется, а данные едут бинарным форматом. На этой странице разберём оба подхода по одним критериям, покажем одну и ту же задачу — создание задачи в таск-трекере — рядом в обоих мирах и соберём персональную рекомендацию: ползунки важности внизу пересчитывают совпадение с каждым претендентом.
Сила REST — в универсальности платформы. Любой язык, любой фронтенд, любой монитор и прокси говорят HTTP: кэширование по заголовкам, коды статусов, идемпотентность методов — всё это уже придумано и задокументировано. JSON читаем в логах и сниффере, Swagger и OpenAPI описывают API для внешних потребителей. Расплата — многословность: ручное декодирование тел, строковые ключи в payload, где опечатка в имени поля ловится только в рантайме, и отсутствие встроенного стриминга: long polling и SSE собираются руками. Именно эту рутину и снимает генерация кода по контракту.
gRPC отвечает строгим контрактом: .proto-файл описывает сервис, методы и сообщения один раз, а protoc выдаёт типизированные заглушки для сервера и клиента — переименовали поле, и компилятор показывает каждый вызов, который надо поправить. Protobuf компактнее и быстрее JSON на сериализации, HTTP/2 мультиплексирует запросы в одном соединении, а серверный, клиентский и двунаправленный стриминг встроены в модель. Цена — бинарный трафик: в curl такой API не прочитаешь, в браузере нужен gRPC-Web или мост вроде Connect, а у внешних разработчиков придётся принимать protobuf-схемы вместо знакомого JSON.
Как читать итог ниже: оценки — усреднение практики команды проекта, а не лабораторные замеры; ползунки позволяют подставить свои приоритеты. Грубая граница: публичный API и клиенты за периметром — REST; внутренний трафик между микросервисами с высокой нагрузкой — gRPC; часто берут обоих — REST на входе, gRPC внутри. У нас оба мира разобраны до итоговых проектов: REST API — в курсах веб-фреймворков, gRPC — от первого proto-файла до микросервисов.