При кэшировании данных высчитывается дельта – разница между двумя версиями данных ресурса, позволяющая мобильному устройству восстановить новую версию ресурса из сохранённой старой версии.
Для обозначения дельты между двумя версиями данных ресурса используется преобразование начальной версии данных к конечной.
При запросе дельты указываются начальная и конечная версии:
нумерация версий начинается с нуля. Нулевая версия обозначает то, что данные ресурса еще не загружены;
при первой загрузке данные ресурса получают версию «1», даже если они пустые;
при каждой следующей загрузке номер версии увеличивается на единицу, даже если данные ресурса не изменились;
для обновления данных до последней версии на мобильном устройстве в запросе указывается ключевое слово «last» в качестве номера версии конечных данных ресурса;
версию дельты можно указать ключевым словом «auto», в таком случае вычисление версий данных будет происходить по параметру «ETag» в запросе.
Ниже описан синтаксис записи версий дельты в нотации ABNF:
delta_versions = old "-" new
old = "v" version_number
new = ("v" version_number) / "last"
version_number = 1 * DIGIT
Пример корректных версий: v0-last, v2-last, v1-v3, v2-v2.
Пример некорректных версий: v2-v1, v0-v0, v1-v0.
Примечание. Дельта не имеет смысла, если конечная версия нулевая или меньше начальной, например, запись «v2-last» некорректна при конечной версии «1».
Запрос может быть выполнен синхронно в том же потоке выполнения и асинхронно в новом потоке выполнения. В случае синхронного запроса результат будет доступен сразу же после выполнения запроса. В случае асинхронного запроса сначала используется подготовка к запросу и функция «callback», которая вызывается системой по приходу результата запроса. Результат запроса передается в функцию как аргумент.
Время выполнения различных запросов к API зависит от быстрых и длительных методов. Основные особенности выполнения быстрого метода:
метод выполняется в UI-потоке;
запрос выполняется только синхронно;
результат выполнения запроса возвращает метод.
См. также: