- PVSM.RU - https://www.pvsm.ru -
Давно заметил, что на хабре нет ни одной статье о такой замечательной библиотеке как RestKit [1], написанной на Objective-C и предоставляющая прекрасные возможности для работы с RESTful [2]-сервисами. Поэтому и пришла идея опубликовать краткое описание некоторых возможностей библиотеки, тем более что уже вышла совершенно новая её версия использующая за основу AFNetworking [3] библиотеку для работы с HTTP. В статье описывается одна из важнейших для меня функциональностей — маппинг объектов.
Процесс установки библиотеки подробно описан на на странице [4] проекта на GitHub'е. Так же библиотека доступка в Pod'ах:
$ cat Podfile
platform :ios, '5.0'
pod 'RestKit', '~> 0.20.0pre'
Обойдёмся без теории, ибо статья всё-таки для тех, кто понимает, хотя бы, что такое REST и зачем он нужен.
При старте приложения необходимо установить начальные параметры для синглтонов работающих с HTTP и занимающихся мапингом объектов:
NSURL *baseURL = [NSURL URLWithString:kServerHost];
AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
[RKObjectManager setSharedManager:objectManager];
Для начала нам необходимо описать класс в котором будут храниться данные (куда будут мапиться):
@interface TaskListSuccess : NSObject
@property(nonatomic, copy) NSString *created_at;
@property(nonatomic, copy) NSString *updated_at;
@property(nonatomic, copy) NSString *user_id;
@property(nonatomic, copy) NSString *ID;
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) NSString *time;
@end
Далее необходимо добавить правило для ответов по каким запросам будет использоваться данный класс и по какому правилу мапятся объекты:
RKObjectMapping* successAuthResult = [RKObjectMapping mappingForClass:[TaskListSuccess class]];
[successAuthResult addAttributeMappingsFromDictionary:@{ // задаются оссоциации полей JSON(XML) к параметрам класса
@"created_at": @"created_at",
@"updated_at": @"updated_at",
@"user_id": @"user_id",
@"id": @"ID",
@"title": @"title",
@"time": @"time",
}];
NSIndexSet *successStatusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Набор статус-кодов, при которых запрос является успешно выполненым.
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:successAuthResult
pathPattern:@"tasks"
keyPath:nil
statusCodes:successStatusCodes];
[[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor];
Параметр pathPattern класса RKResponseDescriptor описывает шаблон пути, для маппинга которого будет использоваться наш класс.
Далее необходимо отправить сам запрос:
RKObjectManager *objectManager = [RKObjectManager sharedManager];
[objectManager getObject:nil path:@"tasks" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
//Тут происходит обработка данных
...
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
//Тут необходимо обрабатывать ошибки
...
}];
Это простейший запрос, иногда нам необходимо больше гибкости в настройке запроса, тогда делать можно, например, следующим образом:
RKObjectManager *objectManager = [RKObjectManager sharedManager];
NSMutableURLRequest *urlRequest = [objectManager requestWithObject:nil method:RKRequestMethodPOST path:@"tasks" parameters:nil];
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:urlRequest success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
//Тут происходит обработка данных
...
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
//Тут необходимо обрабатывать ошибки
...
}];
[objectManager enqueueObjectRequestOperation:operation];
Объект класса RKObjectRequestOperation содежит все возможные параметры, которые мы можем устанавливать как нам угодно.
Статья ознакомительная и направлена на то, что бы понять актуально ли описывать эту библиотеку далее, тем более, что есть очень хорошая документация на английском языке. В общем, если данная тема интересует, то можно будет к ней вернуться и описать другие аозможности библотеки, а так же рассказать о личных шишках, набиты во время её использования.
Возможности:
Всего доброго! Мир!
Автор: sstepashka
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ios/29057
Ссылки в тексте:
[1] RestKit: http://restkit.org/
[2] RESTful: http://ru.wikipedia.org/wiki/REST
[3] AFNetworking: https://github.com/AFNetworking/AFNetworking
[4] странице: https://github.com/RestKit/RestKit/wiki/Installing-RestKit-v0.20.x-as-a-Git-Submodule
[5] Источник: http://habrahabr.ru/post/172233/
Нажмите здесь для печати.