Как аннулировать / принудительно обновить маршрут кэша по следующему запросу с помощью Retrofit и OKHttp?
Я использую Retrofit с клиентом OKHttp для кэширования ответов из API JSON.
Это работает красиво.
однако, если я выполняю действие на устройстве, которое заставляет данные обновляться на сервере, мне нужен способ "аннулировать" определенный маршрут, чтобы гарантировать, что в следующий раз запрос будет сделан для этих данных, он будет извлечен с сервера снова, а не теперь устаревшая кэшированная версия.
В настоящее время я работал вокруг этого явно вызов нового маршрута с флагом "без кэша" в заголовке управления кэшем запроса, но это заставляет меня загружать новые данные до того, как они понадобятся, потенциально несколько раз, если будут предприняты несколько действий, просто чтобы сохранить кэш в актуальном состоянии.
есть ли способ отметить маршрут/метод в моем клиенте retrofit / OKhttp, поскольку срок действия кэша истек, требуя обязательного обновления по сети при следующем запросе?
3 ответов
для этого нет API, но он должен быть. Пожалуйста!--2-->открыть проблема OkHttp, чтобы сообщить об этом.
вероятно, нам потребуется некоторое время для реализации, потому что нам нужно будет выяснить, какой лучший API для этого. Аннулирование одного URL-адреса является простым. Аннулирование диапазона URL-адресов (скажем square.com/cash/*
) сложнее, потому что кэш OkHttp в настоящее время организован контрольными суммами URL. Есть также уродливые крайние случаи, например, что происходит, если недействительный URL-адрес в настоящее время записывается в кэш.
С retrofit2 и OkHttp3 вы можете заставить новый ответ, добавив заголовок управления кэшем к параметрам определения метода API:
@GET("ws/something")
Something getSomething(@Header("Cache-Control") String cacheControl);
а затем при вызове вам либо supply null
для (возможно-)кэшированной версии или "no-cache"
для живой версии:
myApi.getSomething(forceRefresh ? "no-cache" : null);
теперь это возможно в OkHttp с помощью . As документация говорит:
итератор итератор поддерживает.снимать.)( Удаление URL из iterator вытесняет соответствующий ответ из кэша. Используйте это для выселить выбранные ответы.
Это слились в master В конце декабря 2014 года и, кажется, часть этих тегов (выпуски): родитель-2.4.0-rc1 родитель-2.4.0 родитель-родитель 2.3.0-2.2.0