Представьте официанта, который приносит вам не только заказанный стейк, но и автоматически — суп, десерт, карту вин и меню на следующий месяц. Потому что «ресторан так работает». Вы хотели только стейк, но получили всё меню.
Именно так работают многие обычные REST API: вы просите данные о пользователе — получаете имя, email, дату рождения, список заказов за три года, настройки профиля и историю входов. Хотя вам нужно было только имя.
GraphQL решает эту проблему. Вы описываете точно, какие данные нужны — и получаете ровно их. Ничего лишнего.
---
**Коротко:**
GraphQL — язык запросов для API. Вместо фиксированных «эндпоинтов» (как в REST API) клиент сам описывает, какие поля данных нужны. Меньше трафика, меньше обращений к серверу, больше гибкости.
---
Почему REST API перестал справляться
REST API — стандарт с 2000-х. Каждый «эндпоинт» — отдельный URL с фиксированным набором данных. /users/123 возвращает данные пользователя. /orders возвращает заказы.
Проблема появилась с мобильными приложениями. Мобильный экран маленький — нужны только 3 поля. Но API отдаёт 30. Это:
Over-fetching — получаешь больше данных, чем нужно. Лишний трафик, медленнее загрузка на мобильном.
Under-fetching — один эндпоинт не даёт всего, что нужно. Нужно делать несколько запросов. Лишние обращения к серверу.
В 2012 году Facebook строил мобильное приложение. Медленный интернет в телефонах, маленькие экраны, огромный объём данных. Инженеры разработали GraphQL как решение.¹
---
Как работает GraphQL
В REST API: GET /users/123 → сервер возвращает всё, что есть о пользователе.
В GraphQL: клиент описывает запрос:
`graphql
{
user(id: "123") {
name
}
}
`
Сервер возвращает ровно это:
`json
{
"user": {
"name": "Иван",
"email": "ivan@example.com"
}
}
`
Нужно добавить список заказов? Добавьте в запрос:
`graphql
{
user(id: "123") {
name
orders {
id
total
}
}
}
`
Один запрос — связанные данные из разных источников. В REST это потребовало бы двух отдельных запросов.²
---
Три операции GraphQL
Query — чтение данных. «Дай мне данные о пользователе».
Mutation — изменение данных. «Обнови email пользователя».
Subscription — подписка на события. «Сообщай мне каждый раз, когда приходит новое сообщение». Это работает через WebSocket — постоянное соединение.
Subscription — ключевая фича для реального времени: чаты, лайв-обновления, уведомления.¹
---
Кто использует GraphQL
GitHub перевёл публичный API на GraphQL в 2016 году. Разработчики могут запрашивать ровно нужные данные о репозиториях, коммитах, пул-реквестах.¹
Shopify (крупнейшая платформа e-commerce) строит всю современную функциональность на GraphQL API.
Twitter/X использует GraphQL для мобильного приложения.
Яндекс применяет GraphQL в некоторых внутренних продуктах для гибкой работы с данными.³
---
GraphQL vs REST: не война, а выбор инструмента
GraphQL не убивает REST. У каждого — своя ниша.
REST лучше когда:
- Простые CRUD-операции (создать, прочитать, обновить, удалить)
- Публичное API для широкой аудитории
- Кэширование важно (REST легче кэшировать)
- Команда не знакома с GraphQL
GraphQL лучше когда:
- Сложные взаимосвязанные данные
- Мобильные приложения с ограниченным трафиком
- Много клиентов с разными потребностями (iOS, Android, веб — разные данные)
- Частые изменения в структуре данных
---
Минусы и подводные камни
Сложность для серверной части. GraphQL сложнее реализовать на сервере, чем REST. Нужна схема, резолверы, защита от злоупотреблений.
N+1 проблема. Если неосторожно написать резолверы, один GraphQL-запрос может вызвать сотни запросов к базе данных. Решается специальным паттерном (DataLoader), но требует дисциплины.
Сложность кэширования. REST-запросы хорошо кэшируются по URL. GraphQL запросы — POST-запросы с телом, кэшировать сложнее.²
Проблемы безопасности. Клиент может запросить огромное количество вложенных данных: «пользователи → их друзья → друзья друзей → друзья друзей друзей...». Без ограничений — DoS-атака на свой же сервер.
---
**Запомните:** GraphQL — это не просто технология, это философия: клиент сам описывает, какие данные ему нужны. Это делает API гибкими и эффективными, особенно для мобильных приложений и сложных систем. Facebook решил проблему мобильного интернета с GraphQL — и сегодня это стандарт для крупных платформ.
---
¹ Meta Engineering. Moving Facebook to GraphQL. engineering.fb.com, 2015
² GraphQL Foundation. GraphQL specification. graphql.org/learn/
³ Яндекс — опыт с GraphQL. habr.com/company/yandex/blog/