System Design Space
Граф знанийНастройки

Обновлено: 15 марта 2026 г. в 16:05

gRPC vs REST vs GraphQL: сравнительный обзор

medium

Практическое сравнение трёх API-подходов: модель контракта, производительность, DX и сценарии применения в микросервисах.

Эта глава темы 9 фокусируется на выборе API-стиля под latency, эволюцию схемы и DX.

В реальном проектировании систем материал помогает принимать решения через измеримые ограничения: latency budget, blast radius, устойчивость контрактов и стоимость эксплуатации интеграции.

Для system design interview глава дает структурный язык объяснения: почему выбран подход, какие альтернативы рассматривались и какие operational риски надо фиксировать заранее.

Практическая польза главы

Практика проектирования

Подбирайте API стиль по профилю клиентов: mobile, backend-to-backend или federated UI.

Качество решений

Оценивайте контракт по latency, payload efficiency, schema evolution и governance effort.

Interview articulation

Показывайте decision matrix вместо догматичного выбора «один стиль на всё».

Failure framing

Учитывайте риски over-fetch/under-fetch, сложность observability и lock-in инструментария.

Источник

gRPC Introduction

Официальный гайд по модели gRPC и сервисным контрактам.

Перейти на сайт

На практике команды редко выбирают один «универсальный» API-подход. Обычно вопрос звучит иначе: где нужен стабильный внешний контракт, где критичен low-latency RPC, а где важна гибкость клиентской выборки данных. Эта глава даёт сравнение REST, gRPC и GraphQLчерез архитектурные trade-offs, а не через технологический хайп.

Сравнение по ключевым критериям

КритерийRESTgRPCGraphQL
Модель контрактаHTTP-ресурсы + OpenAPI как внешний контракт.IDL-контракт (`.proto`) с генерацией серверов и клиентов.Единая граф-схема + запросы клиента к нужному подмножеству данных.
Payload и сериализацияОбычно JSON: читаемо, но тяжелее по размеру.Protobuf: компактнее и дешевле по CPU/network.Чаще JSON; размер зависит от формы query и политики кэша.
Latency/throughput профильХороший baseline для публичных API и интеграций.Часто лучше p95 latency на внутренних RPC-path.Выигрывает в гибкости клиента, но может терять на resolver fan-out.
Эволюция APIVersioning через URI/header + backward compatibility policy.Эволюция полей по правилам protobuf (`reserved`, номера полей).Schema evolution через deprecation и typed contract.
КэшированиеСильные встроенные механики HTTP cache/control.Обычно кэш строится на уровне клиента/gateway/application.Требует отдельной стратегии: persisted queries, normalized cache, DataLoader.
Лучший контекст примененияПубличные API, партнерские интеграции, широкий ecosystem tooling.Внутренние межсервисные вызовы, streaming и low-latency контуры.BFF/gateway для сложных UI и нескольких клиентских платформ.

Как выбирать в реальных сценариях

Сценарий

Публичное API для внешних партнеров

Чаще выбирают

REST

Проще onboarding, предсказуемый HTTP-контракт, сильная совместимость по tooling.

Сценарий

Внутренний сервисный mesh с жёстким latency budget

Чаще выбирают

gRPC

Бинарная сериализация и строгий IDL дают более стабильную производительность и контрактную дисциплину.

Сценарий

Мобильный и web-клиент с разными потребностями в данных

Чаще выбирают

GraphQL

Клиент сам формирует выборку и снижает over-fetching/under-fetching на UI слое.

Сценарий

Смешанный enterprise-ландшафт

Чаще выбирают

Комбинация

Частый вариант: REST наружу, gRPC между сервисами, GraphQL как клиентский фасад/BFF.

Частые антипаттерны

Выбирать протокол только по тренду, без требований по latency, команде и операционной зрелости.
Ставить GraphQL поверх хаотичных downstream-запросов без лимитов глубины, persisted queries и DataLoader.
Использовать gRPC без дисциплины эволюции protobuf-контрактов и без контрактных тестов в CI.
Пытаться одним подходом закрыть все use-cases (public API, internal RPC и UI aggregation одновременно).

Рекомендации

Определите API-поверхности по аудитории: external, internal, client-facing.
Зафиксируйте версионирование и правила backward compatibility до активной разработки.
Для GraphQL заранее введите guardrails: depth/complexity limits, persisted queries, resolver budgets.
Для gRPC введите protobuf governance: `reserved` поля, правила enum, deprecation policy.
Проверяйте решение на production-метриках: p95 latency, error rate, CPU cost и скорость изменений контракта.

References

  • Roy Fielding: REST dissertation - первоисточник ограничений REST и архитектурного стиля.
  • gRPC Documentation - официальное введение в сервисы, контракты и типы RPC-вызовов.
  • GraphQL Learn - официальный материал по схеме, query/mutation и практикам производительности.
  • OpenAPI Specification - каноничный стандарт описания REST-контрактов и схем данных.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки

System Design Space

© 2026 Александр Поломодов