Что нужно сделать в Android, чтобы выполнять сетевые запросы
Что проверяют
Знаете ли вы обязательный минимум и понимаете ли, почему запрос нельзя делать в главном потоке.
Как отвечать
По шагам.
1. Разрешение. В манифест добавляется <uses-permission android:name="android.permission.INTERNET" />. Оно обычное, не опасное, у пользователя ничего не спрашивается.
2. Не в главном потоке. Сетевой вызов в потоке интерфейса выбрасывает NetworkOnMainThreadException. Работа выполняется в корутине на Dispatchers.IO, запущенной в области с правильным жизненным циклом (viewModelScope), чтобы запрос отменился при уходе с экрана. Для работы, которая должна пережить закрытие приложения, берут WorkManager.
3. Клиент и разбор ответа. На практике Retrofit поверх OkHttp плюс сериализация через kotlinx.serialization или Moshi. Retrofit умеет suspend-функции, поэтому отдельных колбэков не нужно.
4. HTTPS. С Android 9 незашифрованный трафик запрещён по умолчанию. Если нужен доступ к серверу по HTTP, это настраивается через конфигурацию сетевой безопасности, и делать это стоит только для отладочной сборки.
5. Ошибки и таймауты. Задаются таймауты соединения и чтения, обрабатываются и сетевые сбои, и коды ответа. Результат отдаётся на экран как явное состояние: загрузка, данные, ошибка. Нужен вменяемый текст ошибки, а не пустой экран.
6. Реальные условия. Проверка доступности сети, кэш OkHttp для повторных запросов, поведение при её отсутствии. Приложение должно что-то показывать офлайн, а не падать.
Хорошо, если добавите про перехватчики OkHttp: через них удобно вешать авторизацию, повтор с обновлением токена и логирование, причём логирование тела ответа обязательно отключается в релизной сборке.
Где спотыкаются
Забывают разрешение и долго ищут причину.
Пускают запрос в GlobalScope, из-за чего он переживает экран.
Не обрабатывают отсутствие сети.
Оставляют перехватчик с логированием тела в релизе и пишут в журнал токены.