Определите смысл «Сохранить» в своём приложении
В предлагаемом туристическом приложении «Сохранить» означает оставить выбранный исторический материал на текущем устройстве для чтения позже. Это функция, которую нужно реализовать в вашем приложении, а не эндпоинт архива. Reddit App API не предоставляет закладки, межустройственную синхронизацию или аккаунт списка чтения. Объясните различие, прежде чем турист начнёт полагаться на список в поездке.
Когда турист сохраняет обсуждение, приложению стоит хранить минимальную ссылку на источник, а не дублировать полный текст публикации. По возможности сохраните идентификатор записи, проверенную ссылку и достаточно контекста, чтобы узнать выбранный материал. Если сохраняете ещё и короткий отрывок, выбранный пользователем, явно обозначьте это решение и учтите содержание и права третьих лиц.
Не превращайте три даты в одну
Приложение должно различать исходное время создания записи и момент сохранения пользователем. Можно также записать время получения выбранного материала. Подпись вроде «Сохранено на этом устройстве» описывает действие приложения; она не означает, что обсуждение было тогда написано, проверено или обновлено. Неизвестную исходную дату оставляйте неизвестной.
Не считайте сохранённый заголовок или отрывок доказательством того, что текущий источник всё ещё говорит то же самое. Сохраняйте контекст выбора без выдуманных подробностей. Комментарий из частичного результата остаётся ссылкой на эту запись, а не полной веткой и не гарантией последующей доступности соседних ответов.
Отделяйте локальное открытие от нового поиска
Локальный список может показывать уже сохранённые метаданные или отрывок без повторного обращения к сервису. Новый поиск записи должен быть осознанным действием, а не скрытым обновлением каждого элемента при открытии списка. Каждый успешный запрос стоит один кредит; явный поиск /v1/item?id=RECORD_ID — тоже запрос. Ключ архива по-прежнему остаётся на бэкенде.
Поиск отдельной записи может вернуть успешный пустой массив data, если запись не возвращена; не предполагайте, что для отсутствующего материала сервис использует 404 или 410. Такой пустой успех тарифицируется. Неудачный запрос или потерянный ответ также не доказывают удаление записи. Различайте подписи «Недоступно при этом поиске», «Ошибка запроса» и «Повторно не проверялось».
Пусть локальные действия соответствуют обещанию
Для предлагаемого списка предусмотрите понятное действие «Удалить с этого устройства». Оно должно удалять локальную ссылку и связанный отрывок согласно устройству вашего приложения. Оно не удаляет публикацию Reddit или запись архива, не закрывает аккаунт сервиса и не меняет его платёжные записи. Не представляйте локальное действие как более широкий запрос удаления.
Если выбираете предел хранения или правило срока действия, объясните и проверьте это правило приложения, не выдумывая срок хранения сервиса. Дайте читателю понять, что будет удалено. Очистка устройства, ограничения браузерного хранилища или очистка данных приложения тоже могут убрать локальные материалы. Не обещайте постоянного доступа только потому, что элемент сохранён.
Чётко ограничьте ожидания от офлайн-доступа
Списку одних ссылок может потребоваться соединение для открытия источника. Сохранённый отрывок может читаться локально, если приложение реализует и поддерживает это, но всё обсуждение или карта от этого не становятся доступными офлайн. Покажите, что действительно сохранено, до ухода туриста из зоны связи. Руководство не утверждает, что такая офлайн-функция уже создана или проверена.
Отделяйте это хранилище приложения от сессии аккаунта сайта сервиса и ссылки на последний счёт. Виджет может хранить invoice id и user id для каждого хоста; этот механизм не является списком чтения и не должен использоваться для хранения API-ключа. Резервное копирование, экспорт или синхронизация устройств были бы отдельными функциями, которые вам предстоит спроектировать и описать. В /ru/#field-notes есть заметки о преобразовании записей и бюджете запросов.