Какой паттерн используется при построении REST клиентов в Android
Что проверяют
Видите ли вы паттерны внутри привычных библиотек, а не только слово Repository. Retrofit и OkHttp почти целиком собраны из классических паттернов, и интервьюер проверяет, понимаете ли вы, как они работают. Следом спрашивают, как вы обрабатываете ошибки сети и где живёт кэш.
Как отвечать
Разделите ответ на два уровня. Уровень HTTP-клиента:
- Builder:
Retrofit.Builder()иOkHttpClient.Builder()собирают сложный объект с базовым адресом, таймаутами, конвертерами; - Dynamic Proxy: вы пишете только интерфейс с аннотациями
@GET,@POST,@Path, а реализацию Retrofit создаёт в рантайме черезjava.lang.reflect.Proxy, превращая вызов метода в HTTP-запрос; - Adapter и Factory:
Converter.Factoryпревращает тело ответа в объекты (kotlinx.serialization, Moshi, Gson),CallAdapter.FactoryадаптируетCallк другому типу. Поддержкаsuspendфункций встроена в сам Retrofit; - Chain of Responsibility: интерсепторы OkHttp. Каждый получает
Chain, может изменить запрос, вызватьchain.proceed()и обработать ответ. Так добавляют токен и логирование, а обновление токена по401делают черезAuthenticator; - Facade:
ApiServiceскрывает от остального кода детали HTTP.
Уровень архитектуры: над API стоит Repository, который объединяет удалённый источник и локальный (Room, DataStore), решает, откуда брать данные, и отдаёт наружу доменные модели, а не DTO. Ошибки заворачивают в Result или свой sealed-тип, чтобы ViewModel не ловила HttpException и IOException напрямую. Клиент создаётся один раз и внедряется через Hilt или Koin.
Где спотыкаются
Отвечают «MVVM». Это паттерн слоя представления, к устройству REST-клиента он отношения не имеет.
Создают новый OkHttpClient на каждый запрос и теряют общий пул соединений и кэш.
Пробрасывают DTO из Retrofit прямо в UI. Любое изменение формата ответа на бэкенде ломает экраны, а маппинг в доменную модель эту связь разрывает.