Перейти к основному содержанию
Минцифры утвердило требования к облачным провайдерам

Минцифры утвердило требования к облачным провайдерам для государственных данных

Тело материала

Представьте официанта, который приносит вам не только заказанный стейк, но и автоматически — суп, десерт, карту вин и меню на следующий месяц. Потому что «ресторан так работает». Вы хотели только стейк, но получили всё меню.

Именно так работают многие обычные 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

email

}

}

`

Сервер возвращает ровно это:

`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/

Поделиться: TG VK