Я работаю с BOX Content SDK для iOS .BOX обычно рекомендует выполнять какое-либо кэширование результатов API, чтобы снизить риск превышения ограничений регулирования API.Я вижу, что в SDK есть протокол с именем BOXContentCacheClientProtocol, и многие запросы API имеют методы, которые, по-видимому, используют кэшированные результаты.Например, один из запросов на получение информации о папке:
- (void)performRequestWithCached:(BOXFolderBlock)cacheBlock
refreshed:(BOXFolderBlock)refreshBlock
{
if (cacheBlock) {
if ([self.cacheClient respondsToSelector:@selector(retrieveCacheForFolderRequest:completion:)]) {
[self.cacheClient retrieveCacheForFolderRequest:self completion:cacheBlock];
} else {
cacheBlock(nil, nil);
}
}
[self performRequestWithCompletion:refreshBlock];
}
Мне кажется, что правильным способом реализации retrieveCacheForFolderRequest в клиенте кеша было бы хранить результаты запроса каждой папки в кешеи искать их по какому-то уникальному идентификатору.Если запрос на папку был сделан ранее и имеет результаты в кеше, просто верните кешированные результаты.Примерно так:
- (void)retrieveCacheForFolderRequest:(BOXFolderRequest *)request
completion:(BOXFolderBlock)completionBlock
{
BOXFolder *cachedResult = [_cache objectForKey:request.folderID];
if (cachedResult) {
completionBlock(cachedResult, nil);
}
}
Однако при поиске источника для executeRequestWithCached успешный поиск кэшированного результата не помешает реализации запроса по-прежнему вызывать API для получения тех же результатов с сервера.
Я что-то упустил?Предполагается ли, что вызывающая функция executeRequestWithCached отменяет запрос, если вызывается cacheBlock?Надеюсь, кто-нибудь из BOX подберет это и даст руководство.