Пятый фактор
Обсудить задачу
Безопасность и эксплуатация

Защита GraphQL API от тяжёлых запросов

Собираем схему, серверные обработчики полей GraphQL (resolver), журналы и реальные операции, измеряем глубину, количество узлов, SQL и время выполнения. Выделяем дорогие поля и списки, задаём максимальную глубину, размеры страниц, общий лимит узлов и базовую формулу стоимости.

Срок: 4 рабочих дня

Когда стоит обратиться

Обычно к нам обращаются в таких ситуациях:

  • Один запрос с глубокой вложенностью заметно повышает процессор, память или число SQL-обращений.
  • Поля списков принимают огромное значение first или limit, а общий rate limit считает такой запрос обычным вызовом.
  • Команда хочет открыть GraphQL партнёрам, сохраняя предсказуемую стоимость каждой операции.

Что именно мы сделаем

01

Собираем схему, серверные обработчики полей GraphQL (resolver), журналы и реальные операции, измеряем глубину, количество узлов, SQL и время выполнения.

02

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

03

Добавляем проверку до выполнения серверных обработчиков, понятный ответ клиенту, таймаут и отдельные пороги для доверенных операций.

04

Исправляем согласованные N+1 и пагинацию, добавляем журнал имени операции, пользователя, стоимости и причины отказа.

05

Проводим обычные, граничные, глубоко вложенные и широкие запросы, сравниваем нагрузку и сохраняем тесты.

Что входит в стоимость

22 000 ₽ за всю работу

Собираем схему, серверные обработчики полей GraphQL (resolver), журналы и реальные операции, измеряем глубину, количество узлов, SQL и время выполнения. Выделяем дорогие поля и списки, задаём максимальную глубину, размеры страниц, общий лимит узлов и базовую формулу стоимости. Добавляем проверку до выполнения серверных обработчиков, понятный ответ клиенту, таймаут и отдельные пороги для доверенных операций.

Перед сдачей проверяем, что обычные клиентские операции укладываются в согласованные лимиты. В комплект результата входят: рабочие лимиты глубины, размера, стоимости и времени GraphQL; журнал срабатываний с операцией и понятной причиной; набор граничных и нагрузочных тестов для дальнейших релизов. Небольшие связанные уточнения, которые появляются во время работы, уже учитываем в стоимости.

Что будет готово

Материалы

Передадим вам

  • Рабочие лимиты глубины, размера, стоимости и времени GraphQL.
  • Журнал срабатываний с операцией и понятной причиной.
  • Набор граничных и нагрузочных тестов для дальнейших релизов.
Проверка

Перед сдачей проверим

  • Обычные клиентские операции укладываются в согласованные лимиты.
  • Глубокий или чрезмерно широкий запрос останавливается до тяжёлой работы серверных обработчиков и базы.
  • Срабатывание содержит имя операции, рассчитанную стоимость, лимит и безопасный ответ клиенту.

Как это выглядит на практике

Глубокий запрос дерева каталога

Типичная ситуация: один запрос с глубокой вложенностью заметно повышает процессор, память или число SQL-обращений. Сначала выполняем обычный запрос категории с согласованной страницей товаров и фиксируем стоимость, затем добавляем несколько уровней вложенных связей и увеличиваем число объектов, а в финале защита останавливает запрос до выполнения дорогих обработчиков и создаёт запись в журнале.

  1. 01

    Выполняем обычный запрос категории с согласованной страницей товаров и фиксируем стоимость.

  2. 02

    Добавляем несколько уровней вложенных связей и увеличиваем число объектов.

  3. 03

    Защита останавливает запрос до выполнения дорогих обработчиков и создаёт запись в журнале.

  4. 04

    Упрощаем запрос и подтверждаем штатный ответ с предсказуемым числом SQL-обращений.

Что понадобится для работы

От вас

  • Доступ к GraphQL-схеме, серверному коду, журналам и тестовому окружению.
  • Примеры запросов веб-клиента, мобильного приложения и партнёров.
  • Список дорогих операций и допустимые размеры ответов.

Если у вас немного другая ситуация

Небольшие уточнения, которые помогают довести согласованный результат до рабочего состояния, уже учитываем в цене. Если по ходу работы появится отдельный крупный блок или понадобится платная лицензия, сначала обсудим варианты и стоимость. Расскажите о своей ситуации — подстроим план под неё.

Стоимость работ 22 000 ₽ полная стоимость известна заранее
  1. 3 000 ₽после подписания договора через Диадок
  2. 19 000 ₽после выполнения, демонстрации и приёмки результата

Предоплата входит в общую стоимость. Оставшуюся сумму оплачиваете после демонстрации и приёмки готовой работы.

Часто спрашивают

Об этой услуге

Чем стоимость запроса отличается от rate limit?

Rate limit считает число обращений, а стоимость учитывает поля, вложенность и объём списков внутри одного обращения. Один вызов GraphQL способен быть во много раз тяжелее другого.

Что такое глубина GraphQL?

Это число уровней вложенных полей в операции. Циклические связи схемы позволяют построить очень глубокий запрос, поэтому глубину полезно ограничивать.

Можно оставить сложный отчёт для сотрудников?

Да. Для авторизованной роли или именованной доверенной операции зададим отдельный лимит, таймаут и контроль использования.

Защита исправит N+1 запросы?

Найдём главные N+1 в контрольных операциях и поправим их через batching или DataLoader. Более крупную перестройку серверных обработчиков сначала обсудим.

Цена и изменения по ходу работы

Цена на странице окончательная?

Да. Перед началом мы сверяем исходные данные и фиксируем результат в договоре. Указанная на странице сумма покрывает согласованную работу целиком, даже если её техническая реализация потребует больше времени, чем ожидалось при оценке.

Что означает резерв незапланированных работ?

Это уже включённый в цену запас времени на небольшие связанные уточнения заказчика, которые появляются после старта: например, добавить поле, изменить формат уведомления или учесть ещё одно условие обработки.

Резерв рассчитывается по формуле: стоимость услуги × 30% ÷ 1 500 ₽. Для услуги за 30 000 ₽ это 6 часов. Эти часы относятся только к дополнительным, заранее незапланированным уточнениям. Они не являются сроком проекта и не ограничивают время на основную работу: согласованный результат мы выполняем полностью.

Можно уточнять детали уже во время работы?

Да. Небольшие связанные изменения обычно помещаются во включённый резерв и не требуют доплаты. Если новая идея заметно меняет результат или превращается в самостоятельную задачу, сначала обсудим подход и стоимость. Любое решение согласуем до выполнения.

Начало работы и оплата

Как оформляются договор и оплата?

Подписываем договор через Диадок. Предоплата составляет 3 000 ₽ и входит в общую стоимость услуги. Остаток оплачивается после демонстрации и приёмки готового результата.

Когда начинается срок выполнения?

Срок отсчитывается после согласования задачи, получения необходимых доступов и материалов, подписания договора и поступления предоплаты. Конкретную дату старта и плановый день готовности подтверждаем перед началом.

Как учитываются платные лицензии и внешние сервисы?

До старта проверяем, нужны ли тарифы, лицензии, сертификаты или дополнительные ресурсы внешних систем. Если они потребуются, заранее покажем варианты и стоимость. По возможности аккаунты и лицензии оформляются сразу на заказчика.

Проверка результата и гарантия

Как принимается готовая работа?

Вместе проверяем согласованные сценарии на контрольных данных или тестовой копии, а затем демонстрируем результат. Для интеграций сверяем передачу данных и обработку ошибок, для сайта — работу нужных страниц и действий пользователя, для отчёта — расчёты и обновление данных.

Какая гарантия действует после сдачи?

На выполненные изменения действует гарантия 3 месяца. Если в изменённой нами части обнаружится ошибка нашей реализации, проверим и исправим её без дополнительной оплаты. Переданные материалы, настройки и код остаются у заказчика.

Следующий шаг

Опишите задачу

Расскажите, что происходит сейчас и какой результат хотите получить. Можно указать сайт, CMS, 1С, CRM, ERP или другую систему. Если подходящую услугу выбирать рано, просто опишите ситуацию — мы разберёмся и предложим следующий шаг.