Есть ли опыт работы с GraphQL
Что проверяют
Был ли у вас реальный опыт с GraphQL в iOS-клиенте или вы знаете его по статьям. Уточнения идут сразу: чем генерировали модели, как устроено кэширование, как обрабатывали ошибки и пагинацию.
Как отвечать
Если опыт есть, рассказывайте через конкретный проект: что за API, зачем выбрали GraphQL, сколько экранов на нём жило. Опорные точки для iOS:
- Apollo iOS: основной клиент. Операции лежат в
.graphql-файлах, кодогенерация по схеме превращает их в типизированные Swift-модели. Несовместимое изменение схемы ломает сборку, а не приложение у пользователя; - нормализованный кэш: Apollo раскладывает ответы по объектам с ключом из
__typenameиid, поэтому новое имя пользователя обновляет все экраны сразу. Хранилище в памяти или в SQLite, политика кэша задаётся на запрос; - фрагменты: экран или ячейка объявляет свой фрагмент нужных полей, запрос собирается из них;
- пагинация: чаще курсорная в стиле Relay, с
edges,nodeиpageInfo; - подписки: через WebSocket, если сервер их поддерживает.
Отдельно скажите про ошибки: GraphQL-сервер обычно отвечает HTTP 200 даже при ошибке, сами ошибки лежат в массиве errors, а рядом могут быть частичные данные. Клиент должен разбирать это, а не смотреть только на статус.
Можно упомянуть, что для пары запросов тяжёлая библиотека не нужна: POST с телом {query, variables} через URLSession и Codable.
Если опыта нет, скажите честно и опишите, с чем работали: REST, Codable, свой сетевой слой. Затем покажите понимание разницы: клиент сам выбирает поля, один эндпоинт, строгая схема, зато сложнее HTTP-кэширование и часть нагрузки уходит на сервер.
Где спотыкаются
Говорят, что GraphQL всегда быстрее REST. Запросов меньше, но тяжёлый вложенный запрос бьёт по серверу, а привычное для REST кэширование по URL здесь не работает.
Проверяют только HTTP-статус и пропускают ошибки из errors, после чего экран молча показывает пустоту.
Заявляют опыт, но не могут ответить, как генерировали модели и как обновлялся кэш после мутации. Это первое, о чём спросят.