Какие сетевые библиотеки использовали в iOS
Что проверяют
Вопрос-разведка: писали ли вы сетевой слой сами или дёргали готовую обёртку по примеру из README. Интервьюер хочет услышать не список, а причину выбора и знание базового URLSession. Следом почти всегда идёт пара уточнений: как вы тестируете сетевой слой и что делаете с протухшим токеном.
Как отвечать
Начните с системного стека, потом про сторонние библиотеки:
URLSession: конфигурацииdefault,ephemeralиbackground, async/await APIdata(for:)иbytes(for:)с iOS 15, кэш черезURLCacheи заголовки,waitsForConnectivity, таймауты запроса и ресурса;- разбор ответа:
CodableиJSONDecoderс настроеннымиkeyDecodingStrategyиdateDecodingStrategy, типизированные ошибки вместо строк; - Alamofire:
RequestInterceptorсadaptиretry, валидация, мультипарт. Берут ради экономии на рутине, а не потому что система не умеет; - Moya: описание API перечислением через
TargetType, удобно для стабов, тянет за собой Alamofire; - состояние сети:
NWPathMonitorиз фреймворкаNetwork, а не старыйReachability. Решение всё равно принимается по факту ошибки запроса, а не по предварительной проверке; - тесты: подмена через
URLProtocolвconfiguration.protocolClassesили протокол над клиентом и фейковая реализация.
Дальше расскажите про свой слой: одна точка сборки запроса и заголовков, обновление токена через актор или последовательную очередь, чтобы десять параллельных ответов 401 не запустили десять refresh, декодирование вне главного потока, отмена через Task.cancel(), повтор с экспоненциальной задержкой только для сетевых и 5xx ошибок. Если делали пиннинг сертификата, скажите, что он живёт в urlSession(_:didReceive:completionHandler:).
Где спотыкаются
Называют Alamofire, но не могут объяснить, что он добавляет поверх URLSession. Это читается как «так было в проекте до меня».
Проверяют доступность сети перед каждым запросом и блокируют работу приложения из-за ложного отрицания на плохом Wi-Fi.
Не сериализуют обновление токена. Параллельные запросы получают 401, каждый идёт обновляться, сервер видит гонку и разлогинивает пользователя.