GraphQL и REST: ключевые отличия

REST строит API вокруг ресурсов: каждый эндпоинт возвращает фиксированную структуру. GraphQL строит API вокруг данных: клиент описывает нужную форму ответа в самом запросе.

# REST: GET /products/42 → возвращает все 50 полей
# GET /products/42/recommendations → второй запрос

# GraphQL: один запрос, только нужные поля
query {
  product(id: "42") {
    name
    price
    images { url }
    recommendations(limit: 6) {
      id
      name
      price
    }
  }
}

Важно: GraphQL использует один эндпоинт (/graphql) для всех запросов, что упрощает API-шлюз, но усложняет HTTP-кеширование — GET-запросы с body не кешируются стандартными CDN. Решение: persisted queries.

Преимущества и ограничения

Параметр GraphQL REST
Гибкость структуры ответа Высокая — клиент управляет Низкая — фиксирована сервером
Кеширование Сложнее (нужны persisted queries) Встроенное HTTP-кеширование
Порог входа Выше (схема, резолверы, типизация) Ниже
Подходит для Сложного фронтенда, мобильных приложений Простых CRUD, webhook’ов
Проблема N+1 Есть (требует DataLoader) Может отсутствовать

GraphQL в headless e-commerce

Shopify, одна из крупнейших платформ, перевела Storefront API на GraphQL как основной. Это означает, что любой headless-магазин на Shopify работает через GraphQL-запросы к каталогу, корзине и заказам.

Типичная архитектура headless-магазина с персонализацией:

Браузер / приложение
     ↓ GraphQL
BFF (Next.js API Routes)
     ↓ REST               ↓ REST
Shopify API        Платформа персонализации

BFF агрегирует данные из Shopify (каталог) и платформы персонализации (рекомендации, сегмент пользователя), отдавая клиенту единый ответ через GraphQL.

Практические нюансы для e-commerce

Авторизация: GraphQL не накладывает стандартов на авторизацию — используйте заголовки HTTP так же, как в REST.

Rate limiting: сложнее в GraphQL, так как один запрос может быть дешёвым или дорогим в зависимости от глубины. Shopify, например, считает «стоимость» запроса в условных единицах через анализ схемы.

Документирование: GraphQL самодокументируется через схему — это большое преимущество для команд, интегрирующих сторонние платформы.

Мониторинг: стандартные APM-решения работают с GraphQL, но для детального анализа производительности важно мониторить отдельные поля резолверов, а не только общее время ответа.