← Назад к списку
ТехническаяBackendMiddle

Сравните REST, gRPC и GraphQL. Когда что выбрать?

Короткий ответ

  • REST — ресурсы поверх HTTP/JSON, прост и универсален
  • gRPC — бинарный Protobuf поверх HTTP/2, строгий контракт, стриминг
  • GraphQL — клиент сам описывает нужные поля одним запросом
  • REST для публичных API, gRPC для межсервисного общения
  • GraphQL хорош для фронтендов с разными потребностями в данных
  • У GraphQL сложнее кэширование и защита от тяжёлых запросов

REST — универсальный дефолт, gRPC — быстрый внутренний транспорт, GraphQL — гибкая выдача данных фронтенду.

Как сказать вслух

пример ответа

REST — это ресурсы и стандартные методы HTTP с JSON, его понимает любой клиент, поэтому он хорош для публичных API. gRPC использует бинарный Protobuf и HTTP/2 — он быстрее, даёт строгий контракт и кодогенерацию, поэтому его обычно берут для общения микросервисов между собой. GraphQL позволяет клиенту запросить ровно те поля, что нужны, одним запросом — это удобно, когда много разных фронтендов. Но у него сложнее кэширование и нужно защищаться от слишком тяжёлых запросов.

Подробный ответ

Основной ответ

REST строится вокруг ресурсов и семантики HTTP: простота, читаемость, кэширование на уровне HTTP, но фиксированная форма ответов ведёт к over- и under-fetching. gRPC — RPC-фреймворк с контрактом в Protobuf, бинарной сериализацией и HTTP/2: мультиплексирование, двунаправленный стриминг, кодогенерация клиентов, низкие накладные расходы — отличный выбор для внутренних вызовов между сервисами; минус — браузеры требуют gRPC-Web, отладка глазами сложнее. GraphQL даёт клиенту язык запросов к графу данных: одна точка входа, клиент выбирает поля, схема типизирована и интроспективна. Цена — резолверы порождают проблему N+1, HTTP-кэширование почти не работает (всё POST на один endpoint), нужны лимиты глубины и стоимости запросов.

Ключевые моменты

  • Контракт и эволюция. В gRPC и GraphQL схема — часть протокола, ломающие изменения видны сразу. В REST контракт держится на OpenAPI и дисциплине команды.
  • Производительность. Protobuf компактнее JSON, HTTP/2 мультиплексирует запросы — на внутреннем трафике с тысячами RPS разница ощутима.
  • Over-fetching. REST отдаёт весь ресурс целиком, GraphQL — только запрошенные поля. Для мобильных клиентов с дорогим трафиком это аргумент.
  • Кэширование. REST дружит с HTTP-кэшами и CDN из коробки; GraphQL требует кэшировать на уровне клиента или persisted queries.

Практический контекст

Типичная продакшен-схема: наружу — REST (или GraphQL-гейтвей, если фронтендов много и они разные), внутри между сервисами — gRPC. Интервьюер ждёт не «что лучше», а осознанных критериев выбора: кто потребители, какой трафик, как эволюционирует схема, что с кэшированием и инструментами. Хороший знак — упомянуть реальные минусы каждого подхода, а не только маркетинговые плюсы.

Частые ошибки

  • Называют GraphQL «заменой REST», не упоминая проблемы кэширования и N+1
  • Не знают, что gRPC не работает в браузере напрямую без gRPC-Web
  • Выбирают технологию по моде, а не по профилю потребителей API

ИП Кочкин Алексей Сергеевич · ИНН 390509026279 · ОГРНИП 325390000030973 · jiniys2005@yandex.ru