Skip to content
Andrew Shmig edited this page Jul 6, 2013 · 3 revisions

Запросы являются на мой взгляд самым интересным реализованным классом (после кэша данных :) ).

В целом они позволяют осуществлять запросы не только к социальной сети ВКонтакте (нет жесткой привязки), но так же не исключают удобные методы для работы именно с этой социальной сетью:

- (instancetype)initWithMethod:(NSString *)methodName
                       options:(NSDictionary *)options;

Описание метода можно найти в документации.

Запросы являются асинхронными и работают с делегатами. Делегаты должны соответствовать протоколу VKRequestDelegate в котором лишь один метод является обязательным - метод обработки ответа сервера. В качестве опциональных методов являются:

  1. обработка сообщения об ошибке соединения
  2. обработка сообщения об ошибка парсинга ответа сервера в JSON формат
  3. статус загрузки данных
  4. статус отправки данных

У каждого запроса есть несколько очень полезных свойств:

  1. Подпись (signature)
  2. Время жизни кэша для текущего запроса (cacheLiveTime)
  3. Оффлайн режим запроса (offlineMode)

Рассмотрим каждое свойство подробней:

  1. Подпись (signature)

Подписью объекта может быть любой объект, как словарь неких связанных данных, так и просто строка. Подобное было реализовано с мыслью о том, что при обработке одним классом нескольких запросов (получения друзей и личной информации о каждом из пользователей) необходимо неким образом отличать один запрос от другого. Делать подпись фиксированной было бы неправильно и неудобно, поэтому было решено оставить выбор на усмотрение программиста. Стоит знать, при осуществлении запросов из класса VKUser,что каждый запрос подписан строкой селектора вызвавшего его метода.

  1. Время жизни кэша для текущего запроса (cacheLiveTime)

Время существования кэша для данного запроса определяется именно этим свойством. Некоторые данные меняются очень часто (лента новостей, стена пользователя), а значит было бы неправильно использовать агрессивное кэширование и хранить данные максимально долго, но вот другие запросы, такие, например, как список друзей пользователя, список групп, список подписчиков и тд, могут спокойно жить в течение нескольких дней в кэше. Если происходит запрос к некому файлу/аудиозаписи/видеозаписи, то подобные вещи могут храниться очень долго и не меняться, поэтому можно использоваться для них максимальное время жизни в один год (VKCachedDataLiveTimeOneYear).

  1. Оффлайн режим запроса (offlineMode)

Оффлайн режим непосредственно влияет на то, каким образом будут возвращены/сохранены данные кэша. При отсутствии интернет соединения настоятельно рекомендуется использовать данный режим. Он позволит "продлить" время жизни данным из кэша, которые при стандартном режиме должны были бы быть удалены.

При создании запроса его выполнение начинается не сразу, а после вызова start. Рассмотрим на примере:

VKRequest *infoRequest = [VKRequest requestMethod:@"users.get" options:@{} delegate:self];

//возможная настройка свойств
infoRequest.cacheLiveTime = VKCachedDataLiveTimeOneMonth;
infoRequest.signature = @"Some signature string";

//какие-то действия

[infoRequest start]; // запрос стартовал

Вы спокойно можете отметить запрос, если у вас есть переменная, которая на него ссылается, либо отменить в одном из методов делегата VKRequestDelegate.

Пример:

[infoRequest start]; // запрос стартовал

// какие-то действия

// надо отменить запрос
[infoRequest cancel];

Самым расширенным методом является:

+ (instancetype)requestHTTPMethod:(NSString *)httpMethod
                              URL:(NSURL *)url
                          headers:(NSDictionary *)headers
                             body:(NSData *)body
                         delegate:(id <VKRequestDelegate>)delegate;

Как видите данный метод позволяет настроит запрос к серверу с максимальным числом значимых параметров. Может быть полезен при реализации загрузок аудио/видео на сервер.


Вот так выглядит описание запроса (пример) возвращаемое методом description:

{
    cacheLiveTime = 3600;
    delegate = "<ASAAppDelegate: 0x752c540>";
    offlineMode = NO;
    request = "<NSMutableURLRequest https://api.vk.com/method/users.getFollowers>";
    signature = "followersWithCustomOptions:";
}
Clone this wiki locally