awesome-everything EN
↑ Обратно к восхождению

API

GraphQL N+1: тест с выбором ответа

Суть Синтез юнита GraphQL N+1 в формате с выбором ответа — изоляция резолверов, scope DataLoader, контракты batch, federation и защиты по форме запроса.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов через весь юнит. Каждый — решение, которое ты принимаешь на реальном ревью или в инциденте: не определение для пересказа, а компромисс, который надо взвесить, когда один HTTP-запрос тихо выстреливает тысячу SQL-запросов.

Цель

Убедись, что связываешь изоляцию резолверов, batching и scope DataLoader, контракты batch-функции, federation и защиты по форме запроса — синтез, к которому вели шесть уроков.

Викторина

REST-контроллер для той же страницы «посты с авторами» делает один JOIN; GraphQL-сервер делает 51 запрос. Бага в схеме нет. В чём структурная причина?

Викторина

Почему DataLoader батчит на границе тика event loop, а не по фиксированному таймеру 5 мс, и что это даёт?

Викторина

Рефактор перенёс один DataLoader из context factory Apollo в module scope. Частота вызовов БД в 6× выше при неизменной частоте HTTP, и один tenant временами видит строки другого tenant. Почему?

Викторина

batchLoadFn выполняет SELECT ... WHERE id = ANY($1) и возвращает строки в порядке, который дал Postgres. Время от времени у постов отображается неверный автор. Какое правило нарушено?

Викторина

Supergraph на Apollo Federation маршрутизирует запрос, ссылающийся на 50 пользователей через два subgraph'а. Что берёт на себя router, а что всё ещё должен subgraph пользователей?

Викторина

DataLoader работает, страница быстрая. Атакующий шлёт один документ с 1000 корневых алиасов (q1: user(id:1)…q1000: user(id:1000)). Обращения к БД схлопываются в один batch, но сервер всё равно страдает. Почему и что это останавливает?

Итог

Сквозная линия юнита — один конвейер: изоляция резолверов порождает N+1, DataLoader схлопывает обращения к БД на границе тика, но только при пер-запросном scope и корректном контракте batch с тем же порядком; federation отдаёт сетевой batch, но DB-batch в __resolveReference всё ещё за тобой, а защиты по форме запроса (depth, мультипликативный complexity, persisted/trusted documents, алиас- и batch-капы) останавливают атаки, которых DataLoader не касается. DataLoader чинит, сколько обращений к БД делает запрос; слои защиты управляют тем, какие формы запроса вообще допущены к исполнению.

Продолжить восхождение ↑GraphQL N+1: повторение на припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.