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

Обновлено: 7 мая 2026 г. в 18:26

Удалённые вызовы API: REST, gRPC и GraphQL

сложный

Как выбирать между REST, gRPC и GraphQL: модель удалённого вызова, контракты API, эволюция схемы, задержка, кэширование и поведение при отказах.

REST, gRPC и GraphQL не конкурируют за одну корону; каждый стиль выигрывает в своём сочетании клиентов, контрактов и отказов.

Для реального проектирования глава помогает увидеть, как аудитория API, форма контракта, допустимая задержка, кэширование и обратная совместимость должны определять выбор сильнее, чем личные предпочтения команды.

Для интервью и инженерных разборов она полезна тем, что переводит разговор с синтаксиса API на поведение удалённого вызова: тайм-ауты, повторные попытки, резервный сценарий и наблюдаемость.

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

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

Подбирайте REST, gRPC или GraphQL под аудиторию API, контракт и допустимую задержку.

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

Описывайте модель ошибок, версионирование и обратную совместимость как часть API-дизайна.

Аргументация на интервью

Сравнивайте подходы через простоту клиента, наблюдаемость, кэширование и цену поддержки.

Анализ отказов

Планируйте частичные отказы: тайм-ауты, повторные попытки, резервный сценарий и автоматический размыкатель.

Источник

Remote procedure call

Откуда пришла идея удалённого вызова процедуры и почему сеть нельзя прятать полностью.

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

Зачем сравнивать стили удалённых вызовов

В этой главе , REST, gRPC и GraphQL рассматриваются как разные способы оформить один сетевой диалог. Важно не то, какой стиль выглядит современнее, а где проще держать , задержку, совместимость и поведение при отказах.

Стандарт

OpenAPI Specification

Официальный формат описания REST-контрактов, схем данных, ошибок и авторизации.

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

Базовая модель удалённого вызова

Любой такой вызов начинается с : клиент формирует запрос, сервер выполняет работу и возвращает ответ. Между ними есть , сетевые задержки, тайм-ауты и риск частичного отказа. Поэтому протокол выбирают не отдельно от архитектуры, а вместе с контрактом, моделью ошибок и эксплуатационными ограничениями.

Источник

GraphQL Learn

Официальное введение в схему, запросы, резолверы и практики GraphQL.

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

REST, gRPC и GraphQL: как устроены подходы

Переключайте режимы: диаграмма показывает, что меняется в форме запроса, ответа и контракта между сторонами.

Как работают удалённые вызовы

Выберите подход, чтобы увидеть, как строится запрос и ответ

Запрос и ответ

Клиент
call getUser(id)
Сервер
Клиент
User
Сервер

Ключевые свойства

  • Абстракция вызова процедуры
  • Фокус на методах, а не ресурсах
  • Чаще всего бинарная сериализация

Что важно помнить

Клиент вызывает метод как локальный
Запрос и ответ похожи на функции
Обычно обмен по схеме запрос-ответ
Все четыре подхода опираются на клиент-серверный обмен, контракт и сериализацию данных.

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

КритерийRESTgRPCGraphQL
Модель контрактаРесурсы HTTP и через OpenAPI. в `.proto` и генерация кода.Единая и запросы клиента к нужным полям.
Формат данныхОбычно JSON: читаемо, но часто больше.: компактнее и дешевле для CPU и сети.Чаще JSON; размер ответа зависит от формы запроса и политики кэширования.
Задержка и пропускная способностьНадёжный выбор для публичных API и партнёрских интеграций.Часто лучше подходит для внутренних вызовов с жёстким .Удобен для клиента, но может проигрывать из-за резолверов.
Эволюция API через URI, заголовки или новый ресурс.Эволюция полей по правилам Protocol Buffers: номера полей, `reserved`, совместимые enum. через устаревшие поля, расширение типов и типизированный контракт.
КэшированиеСильные встроенные механики HTTP-кэша и промежуточных прокси.Кэш чаще строят на уровне клиента, шлюза или прикладного слоя.Нужна явная стратегия: , нормализованный кэш и .
Где чаще подходитВнешние API, партнёрские интеграции, простой вход для разных стеков.Внутренние сервисы, строгие контракты, потоковые вызовы и высокая нагрузка., сложные UI и несколько клиентских платформ.

Контракты и эволюция API

REST и OpenAPI

OpenAPI фиксирует точки входа, параметры, схемы ответов, ошибки и правила авторизации. Это снижает риск для внешних клиентов.

gRPC и .proto

`.proto` задаёт интерфейс, сообщения и сервисы. Команда получает строгий контракт, генерацию кода и понятные правила .

GraphQL и схема

Схема описывает типы, поля и связи. Но гибкость клиента требует лимитов глубины, бюджетов для и наблюдаемости.

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

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

Чаще выбирают REST: проще документация, тестирование вручную, кэширование и интеграция с разными языками и платформами.

Внутренний сервисный контур

Часто подходит gRPC: бинарный формат, строгий контракт и низкая задержка важнее, чем удобство ручного вызова из браузера.

Мобильный и web-клиент

GraphQL помогает уменьшить и , если схема и резолверы управляются дисциплинированно.

Смешанная платформа

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

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

Выбирать стиль API по моде, а не по , аудитории клиентов и зрелости эксплуатации.
Ставить GraphQL поверх хаотичных нижестоящих вызовов без лимитов глубины, сохранённых запросов и DataLoader.
Использовать gRPC без правил эволюции `.proto`, и политики устаревания полей.
Пытаться одним стилем закрыть внешний API, внутренние вызовы и клиентскую агрегацию данных.

Практические рекомендации

Сначала разделите API-поверхности по аудитории: внешние интеграторы, внутренние сервисы, клиентские приложения.
Зафиксируйте правила обратной совместимости до активной разработки, а не после первого сломанного клиента.
Проектируйте удалённый вызов как потенциальный : тайм-ауты, повторные попытки, резервный сценарий и автоматический размыкатель.
Сравнивайте решение на метриках: p95/p99 задержка, доля ошибок, стоимость CPU и скорость безопасного изменения контракта.

Что важно запомнить

REST, gRPC и GraphQL не конкурируют за один и тот же сценарий. REST обычно выигрывает там, где важны понятность внешнего контракта и совместимость. gRPC силён во внутренних сервисных вызовах со строгой схемой. GraphQL полезен как клиентский фасад, если команда готова управлять сложностью схемы и резолверов.

Источники

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

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

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