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, но для детального анализа производительности важно мониторить отдельные поля резолверов, а не только общее время ответа.