GraphQL и REST: сравнение

↑ 5.4 Работа с API: REST, GraphQL, WebSocket · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Аргументированный выбор, а не «GraphQL современнее».

Объяснение

КритерийRESTGraphQL
Endpointмного ресурсоводин /graphql
Форма ответафиксирована серверомописывается клиентом
Over/under-fetchingвозможнынет
Количество запросовнесколько на экранодин
ТипизацияOpenAPI (опционально)строгая схема из коробки
Кэширование HTTPнативное (GET, ETag, CDN)сложно (POST) — persisted queries, клиентский кэш
Версионированиеверсии APIэволюция схемы (@deprecated)
ОшибкиHTTP-коды200 + errors
Загрузка файловпростая (multipart)нестандартно
РеалтаймSSE/WebSocket отдельноsubscriptions
ИнструментыPostman, OpenAPIGraphiQL, Apollo Studio, codegen
Сложность серверанижевыше (N+1, лимиты, безопасность)
Сложность клиентанижевыше (клиент, кэш, codegen)
Публичные APIстандартреже
Мобильные клиентылишний трафикэкономия

Когда GraphQL: много разных клиентов (web/mobile) с разными потребностями данных; сложные связанные данные; быстрая итерация фронтенда; агрегация нескольких сервисов (federation).

Когда REST: простые CRUD, публичные API, кэширование на CDN, загрузка файлов, команда без опыта GraphQL, жёсткая простота эксплуатации.

Гибрид: REST для команд и файлов, GraphQL для чтения агрегатов; BFF; gRPC между сервисами.

Нюансы и подводные камни

  • GraphQL не устраняет N+1 — он переносит её на сервер (DataLoader).
  • Безопасность: лимиты глубины/сложности обязательны.
  • «Один запрос» не значит «быстрый запрос».
  • REST + OpenAPI + codegen закрывает большую часть преимуществ типизации.

Практика

  1. Сравните количество запросов экрана заказа в REST и GraphQL.
  2. Опишите критерии выбора для вашего проекта.

Вопросы с ответами

Связанные темы