Возможности OkHttp о которых вы не знали

2024 ж. 14 Мам.
17 244 Рет қаралды

Из видео вы узнаете о различных API, которые помогут вам эффективнее работать с REST API, когда вы используете OkHttp и Retrofit
🔗 Подпишись на канал / @androidbroadcast
🔗 Avito.Tech avito.tech/
💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon / android_broadcast
🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
🔗 Мерч от Android Broadcast androidbroadcaststore.by/
🔗 OkHttp square.github.io/okhttp
🔗 Retrofit square.github.io/retrofit
🔗 MockWebServer github.com/square/okhttp/tree...
#AndroidBroadcast #REST #OkHttp #Retrofit #HTTP #HTTPS #Сеть #RESTAPI #androidstudio
0:00 Вступление
1:09 Retrofit
1:57 Интеграция АвитоТех
2:19 Жизненный цикл запроса
4:20 Кэширование
9:06 Interceptors
14:05 Таймауты
15:58 ConnectionPool
16:59 MockWebServer
18:11 Отладка сетевых запросов в Android Studio
22:00 Заключение

Пікірлер
  • 🔗 Avito.Tech avito.tech/ 💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 🔗 Мерч от Android Broadcast androidbroadcaststore.by/

    @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Кирилл, крутой формат, мне очень понравился. Реально экономит время и позволяет быстро ознакомиться с возможностями технологии

    @SergeyJasfex@SergeyJasfex2 жыл бұрын
  • authenticator() использую для refreshToken-а. Т.е. если interceptor добавляет в хедер реквеста Bearer token (который имеет время жизни), то лямбда, переданная в authenticator(), вызовется в ответ на 401 Unauthorized в любом сделанном нами запросе (т.е. когда наш токен устарел). И таким образом, непосредственно в лямбде, которая передается в метод authenticator(), можно прописать реквест на апдейт токена)

    @sergeykharuk5614@sergeykharuk56142 жыл бұрын
    • в моем приложении на бэкенде аутентификация(access и refresh token) реализована через JWT(делал не я), возможно ли использовать Okhttp Interceptor что делать рефреша токена?

      @andriyshatynskyy5214@andriyshatynskyy52142 жыл бұрын
    • @@andriyshatynskyy5214 возможно. Но только не interceptor, а authenticator. Стандартный подход: Interceptor для добавления accessToken-а в хэдэр запроса, authenticator для обновления accessToken-а с помощью refreshToken-a когда первый протух(бэк должен вернуть 401 в этом случае)

      @BelokonRoman@BelokonRoman2 жыл бұрын
    • @@BelokonRoman спасибо

      @andriyshatynskyy5214@andriyshatynskyy52142 жыл бұрын
    • Тоже самое, но самый явный недостаток Authenticator в том, что при параллельных запросах, все неавторизованные запросы вызывают его, и нужно вручную их синхронизировать

      @aidardauylbay8116@aidardauylbay81162 жыл бұрын
    • В обычном interceptor будет тоже самое, тоже нужно использовать синхронизацию. Я не стал использовать authenticator т.к. при использовании стандартных логов okhttp логи рефреша токена не отображаются.

      @RussianTeaMachine@RussianTeaMachine2 жыл бұрын
  • Формат - топ! Спасибо за видео)

    @user-yg6fe2bs9u@user-yg6fe2bs9u2 жыл бұрын
  • Крутяк! Кирилл, спасибо за труды.

    @user-qu6mb9il6w@user-qu6mb9il6w2 жыл бұрын
  • не знал про Network inspector. Спасибо за просвещение!

    @androidkotlin-6234@androidkotlin-62342 ай бұрын
  • Если backend не поддерживает Cache-Control, мы все ещё можем сделать активацию http cache на стороне клиента используя interceptor (возможно network interceptor, точно не помню) OkHttp. В interceptor мы модифицируемых response добавляя нужные headers как бы от сервера. Это быстрое решение, чтобы снизить нагрузку на backend.

    @ultraon83@ultraon832 жыл бұрын
  • Привет. Для работы с Cache-Control header через Retrofit, можно добавить доп параметр в метод API, с аннотацией Header, и подкладывать туда значение динамически.

    @ultraon83@ultraon832 жыл бұрын
  • Спасибо за видео!

    @thunderdoge@thunderdoge2 жыл бұрын
  • Спасибо, очень полезно.

    @it-vk8ik@it-vk8ik Жыл бұрын
  • Классное видео, вот в таком формате топ

    @radpem@radpem2 жыл бұрын
  • Очень интересный формат, ждём про другие инструменты!

    @Nomad7541@Nomad75412 жыл бұрын
    • Было бы интересно про OAUTH2

      @user-vx5nv2bm9o@user-vx5nv2bm9o2 жыл бұрын
  • Очень крутое и понятное видео , спасибо !

    @mikhailtarasov7403@mikhailtarasov74032 жыл бұрын
  • Видос очень полезный, хотелось бе видеть больше всяких советов и best practices по retrofit.

    @qIKraytonIp@qIKraytonIp2 жыл бұрын
    • По retrofit мало чего рассказывать. Простая и эффективная библиотека, без усложнений и лишнего API

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Очень интересный видос, некоторого не знал

    @romankryvolapov7961@romankryvolapov79612 жыл бұрын
  • Кирилл, спасибо большое, как раз вопрос попался такой на собесе месяца полтора назад, все никак руки не доходили разобраться)

    @user-hf7mb7sn5t@user-hf7mb7sn5t2 жыл бұрын
    • Что именно спросили?)

      @tyt66612@tyt66612 Жыл бұрын
  • Спасибо, очень полезно. В тему отслеживания запросов - стоило рассказать про чакер.

    @bolnoi8@bolnoi82 жыл бұрын
    • Тулинг к теме видео особо не хотел подмешивать, а рассказать отдельно

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо

    @pasha09090@pasha090902 жыл бұрын
  • Network Inspector - хорошая штука, но было бы ещё хорошо, если бы он показывал ещё попытки отправки запроса на сервер (когда получаешь UnknownServerException - сервер лег или интернет плохой)

    @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
  • Очень круто! Сделайте пожалуйста видео по paging3 component с добавление и удаление данные в позиции)

    @nazirjonm6560@nazirjonm65602 жыл бұрын
    • Видео про Paging 3 есть на канале kzhead.info/sun/bN6Pnb2Oe4aZeIU/bejne.html.

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Крутой видос, познавательный, спасибо) Ещё для отслеживания сетевых запросов можно использовать прокси. Например Charles или бесплатный burpsuite. Нетворк менеджер не всегда подключен к приложению. А прокси, если правильно настроить, перехватывает трафик всегда. И если вдруг вылетел какой-то непонятный баг, то с прокси можно просто посмотреть, не бэк ли это непонятно что кинул. + в прокси, (по крайней мере Charles) есть возможности подмены, как запросов, так и ответов. А такие фичи, как перезаписывание ответа сервера из выбранного файла делают разработку/тестирование новых/измененных ручек ооочень удобным. Ctrl+s после изменения файлика в любимом редакторе и вуаля, приложению приходит новый ответ. Приложение не надо ни пересобирать, ни перезапускать. Правда такую точную инфу, как сколько сейчас конекшенов и как между ними распределились запросы прокси конечно не скажет, но в большинстве случаев это и не надо.

    @hievery9678@hievery96782 жыл бұрын
    • Charles - это прокси и больше подходит для тестирования, а вот сетевой инспектор предоставляет больше информации для отладки и понимания, где происходит проблема с вызовами. Инструменты не взаимозаменяемые

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast Если надо поинспектить приложение, то полностью согласен. Но если использовать его чисто как просматривалку запросов/ответов, то они вполне взаимозаменяемые. Я именно такой юзкейс и имел ввиду. Мне показалось, что будет полезно упомянуть прокси. Вдруг для кого-то новенького это будет лучшей альтернативой, про которую он не знал.

      @hievery9678@hievery96782 жыл бұрын
  • Я использую Authenticator для работы с корпоративным OpenId. Использование Authenticator не освобождает от использования Interceptor. Через Authenticator удобно обновлять токен доступа, а через Interceptor добавлять его в заголовки запроса централизованно. На каждый уровень аутентификации добавляю Interceptor.

    @turlir@turlir2 жыл бұрын
  • А если прокси и нетворк менеджер не подходят, то можно посмотреть в сторону hyperion. Его можно так интегрировать, что помимо его основных функций, будет перехватываться весь трафик и выводиться в приложении в специальное меню. Однако смотреть трафик с девайса - не самое удобное занятие, поэтому я бы это оставил как запасной вариант.

    @hievery9678@hievery96782 жыл бұрын
  • Спаассииибо

    @arsenthompson@arsenthompson2 жыл бұрын
  • Формат отличный. Почти 10К подписчиков. Много это или нет - не знаю. Но думаю, что если все 10К - разработчики, то вполне неплохо!

    @sergeysukharev1648@sergeysukharev16482 жыл бұрын
    • Тоже задумываюсь этим вопросом. Даже непонятно какой объем этой аудитории

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Стоить заметить что кешировпние доступно только для GET запросов, также стоит заметить что без хедеров кеша никакой кеш не будет доступный.

    @nikitakhrushchev509@nikitakhrushchev5092 жыл бұрын
  • Спасибо за видос. Немного для меня не ясно с chain. Если я добавлю несколько интерсепторов (в одном, скажем добавлю user-agent, в другом упомянутый apikey), то будет ли запрос отправлен на сервер несколько раз, обрастая параметрами?

    @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
    • Обработчик перехватывает запрос который происходит в OkHttp и изменяет его или просто отслеживает. Т.е. это не создаёт дополнительный запрос к оригинальному и количество перехватчиком может быть сколь угодным

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast спасибо большое!

      @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
  • Спасибо за видео. А как добавить tab Network inspector? У меня его нет. Благодарю.

    @itgik@itgik2 жыл бұрын
    • Он появился в Android Studio Bumble в том виде в котором я показал. До этого он был в секции "Profilers"

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Круто и как всегда вовремя) Друзья, а если в примере с апи-кеем он бы менялся со временем, то что делать тогда?

    @RRRazzzaRRR@RRRazzzaRRR2 жыл бұрын
    • Надо просто сделать другую реализацию, где можно поменять ключ. Это не так сложно. Проблема в том что часть запросов может уйти со старым ключом

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Круто! А что если делать интеграцию после введения и до кода. В текущем варианте сильно сбивает с мысли/настроя.

    @danik030699@danik0306992 жыл бұрын
    • Хорошое предложение

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Полезное видео, можно видео про как делать Refresh token ?

    @bekaryssailaukul1006@bekaryssailaukul10062 жыл бұрын
    • Универсальное нет, только если взять что у вас все сделано по зачёту OAuth 2.0, что я не встречал (

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • 10:05 - тут даже больше поможет value class чем именнованные параметры. Потому что именованные параметры - это добровольное дело на вызывающей стороне, а если token обернуть в какой нибудь value class AccessToken(private val token: String),то на вызывающей стороне уже полюбому придется передавать нужный объект. Но при этом в скомпилированном коде будет просто строка

    @BelokonRoman@BelokonRoman2 жыл бұрын
    • Только с ним должен уметь работать сериализатор

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast в том то и прелесть value class-ов, что ничего дополнительно не надо, т.к. он в конечном счете бедут заменен на примитив, который не требует дополнительных сериализаторов\десереализаторов.

      @BelokonRoman@BelokonRoman2 жыл бұрын
    • Не во всех случаях. Как раз-то в интерфейсе они могут остаться обычным классом. Посмотрите спецификацию их, там много случаев когда остаётся класс обёртка

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast Я знаю. Но голая обертка над не null-овым аргументом всегда будет упрощена до примитива и при этом дает compile time гарантию, что туда не передадут ничего другого. В этом случае есть только выгоды и я не вижу никаких недостатков. А если вы уже начинаете наварачивать что то дополнительное в этоу обертку - то тогда надо уже переходить к обычному классу. Ну и если параметр может быть null - то тоже теряется вся прелесть этого value class-а. Это всего лишь вопрос правильного применения инструментов.

      @BelokonRoman@BelokonRoman2 жыл бұрын
    • Конкретно в этом случае должно хватить и typealias

      @DonkeyKong68@DonkeyKong682 жыл бұрын
  • Можно сделать обёртку для okhttp (работает при чистом okhttp, при retrofit+okhttp и в кмм ktor+okhttp engine/ktor+Ios engine). Возвращает или Single/suspend, если надо что-то одно (кэш или апи), или Observable/Flow, если надо оба или одно, но в каком-то определённом порядке (с флагом откуда данные пришли).

    @woffka94@woffka942 жыл бұрын
    • А зачем?

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • ​@@AndroidBroadcast чтобы сразу показать контент, а не пустой экран (если у нас есть кэш и он не просрочился), и поверх него догрузить уже новый (если он есть). Конечно можно сделать всё нативно через рум, но тогда надо хендлить когда кэш просрочился, как-то хендлить размер кэша, как-то мержить квери для нескольких таблиц, если на одном экране несколько запросов и у них разные данные и другие заботы. Но если поиск или другие квери по БД не нужны, то зачем? С обёрткой код менять практически не надо будет, а так же сохраняется возможность комбайнить несколько запросов (если экран сложный и состоит из N запросов), флэтмапить их (при этом если хоть в одном запросе в цепочке "кэш" будет ошибка кэша, то вся цепочка проигнорится и будет грузить только апишная) или комбайнить кэш + не кэш (условно один поддерживает кэш, а второй нет, но мы хотим первый показать сразу и догружать, а второй просто догружать) без какой-либо мудрёной логики. Ретрофит по дефолту вернёт кэш, только если ошибка с интернетом (и при чём никак не скажет о том, что данные из кэша, а не из апи)

      @woffka94@woffka942 жыл бұрын
  • В каких случаях может понадобиться использовать какие-то библиотеки кроме retrofit? Например, тот же OkHttp в чистом виде или Volley?

    @user-ji7xx4nk2b@user-ji7xx4nk2b2 жыл бұрын
    • Например, когда нужно делать тонкую настройку Http запроса в runtime. Retrofit позволяет эффективно работать с REST, т.е. есть четкий набор вызовов.

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Network Inspector очень похож на раздел Network профайлера. Это одно и то же или они все же различаются?

    @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
    • Да, просто в последней студии произошло перемещение раздела

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast А, вот в чем дело. Спасибо за ответ и за видео.

      @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
  • Как правильно выбрать резмер кэша?

    @Mazaxict11@Mazaxict112 жыл бұрын
    • Общего правила нет и зависит от многих факторов: что вы туда будете класть, как много данных будет, как долго вы ожидаете его хранение в кэше, сколько место у вас у телефоне и пр.

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • А будут видео как создавалось приложение для devtools?

    @user-gv6ih7ct9p@user-gv6ih7ct9p2 жыл бұрын
    • Да, в ноябре буду кодить в прямом эфире

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • в своих пет проектах использую ktor 😎

    @AndreyDerkach8@AndreyDerkach82 жыл бұрын
    • Насколько помню на JVM он работает поверх OkHttp ?

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Про кэш: я правильно понял, что нужно создавать специальную директорию на андройде и тогда там это все хранить? как тогда можно сделать эту директорию безопасной, чтоб никто не имел доступа к вашему кэшу?

    @ivanchepelkin6347@ivanchepelkin63472 жыл бұрын
    • Нужно создавать эту директорию на internal storage. Можно использовать Context.cacheDir

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Формат отличный, от содержания ожидал большей глубины

    @anddev6505@anddev65052 жыл бұрын
  • Апикей он же токен, верно?

    @benedikt7777@benedikt77772 жыл бұрын
    • Это разные вещи, но работа с ними примерно одинаково осуществляется

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • можно сказать так , мы так же токены через интерцептеры для всех запросов выткаем

      @aratj@aratj2 жыл бұрын
  • По поводу размера кеша. Неужели сам Android на уровне ОС не ограничивает это?

    @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
    • Есть стандартный контролируемый кэш, но никто не мешает вне его содержание дать папку и туда что-то складывать

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast Да... Google прислушивается к пользователям, старается снизить уровень энергопотребления, работает над безопасностью и прочим. Но не может помешать разработчику завалить всю память в устройстве как раз навреное по этой причине, потому что функицонирование программы может нарушиться.

      @kirillsushilnikov9614@kirillsushilnikov96142 жыл бұрын
  • +

    @Chernov1984@Chernov19842 жыл бұрын
  • Видео немного на 2:23 обрезалось

    @user-not_defined@user-not_defined2 жыл бұрын
  • Про жизненный цикл ничего не знал :|

    @kamilchulakov@kamilchulakov2 жыл бұрын
  • Sps

    @Vlad_Gromov_1992@Vlad_Gromov_19922 жыл бұрын
KZhead