Основы сетевого взаимодействия с использованием библиотеки AFNetworking.
AFNetworking
При написании приложений зачастую мы используем сетевое взаимодействие, для отправки запросов: GET, POST и т.д. В данной статье мы рассмотрим как взаимодействовать с сетью при помощи AFNetworking-а.
Итак, AFNetworking — это превосходная сетевая библиотека для iOS и Mac OS, имеющая модульную архитектуру с богатым API, которые наверняка вам понравятся.
AFURLSessionManager и AFHTTPSessionManager
В данной библиотеке есть два типа менеджеров AFURLSessionManager и AFHTTPSessionManager, которые предназначены для создания и управления объектом NSURLSession. Для несложных запросов GET и POST обычно используется AFHTTPSessionManager, но для более сложных запросов целесообразно использовать AFURLSessionManager.
Пример использования AFNetworking
Для того чтобы отправлять запросы мы воспользуемся сервисом — http://httpbin.org/, который присылает нам ответ в виде JSON. Начнём с метода GET, т.к. он является самым распространённым.
GET
- (void) testGETRequest:(NSInteger) testParameter {
NSDictionary* parameters = @{@"TestParameter" : [NSNumber numberWithInteger:testParameter]};
NSURL* url = [NSURL URLWithString:@"http://httpbin.org/get"];
AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
[manager GET:[url absoluteString]
parameters:parameters
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@", responseObject);
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull failure) {
NSLog(@"Error: %@", [failure localizedDescription]);
}];
}
При удачном выполнении запроса мы получим следующий вывод
Опишем наши действия по шагам:
- Создаем NSDictionary, который будет содержать наши параметры для передачи на сервер, если же вы не передаете параметры, то не стоит его создавать.
- Создаем NSURL, который будет содержать наш адрес, на который мы отправим наш запрос.
- Ну и конечно наш AFHTTPSessionManager менеджер,
- Вызываем метод GET у нашего менеждера, куда передаем следующий параметры : url – адрес нашего сервера, parameters – параметры для передачи, progress – необходим для отслеживания процесса загрузки, поставим для него значение nil, затем у нас идут два блока: success – если запрос выполнился удачно и failure – если неудачно.
- В блоке success напечатаем наш response –ответ с сервера.
- В блоке failure выведем ошибку из-за которой наш запрос не выполнился.
POST
- (void) testPOSTRequest:(NSInteger) testParameter {
NSDictionary* parameters = @{@"TestParameter" : [NSNumber numberWithInteger:testParameter]};
NSURL* url = [NSURL URLWithString:@"http://httpbin.org/post"];
AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
[manager POST:[url absoluteString]
parameters:parameters
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@", responseObject);
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull failure) {
NSLog(@"Error: %@", [failure localizedDescription]);
}];
}
При удачном выполнении запроса мы получим следующий вывод
Опишем наши действия по шагам:
- Создаем NSDictionary, который будет содержать наши параметры для передачи на сервер, если же вы не передаете параметры, то не стоит его создавать.
- Создаем NSURL, который будет содержать наш адрес, на который мы отправим наш запрос.
- Ну и конечно наш AFHTTPSessionManager менеджер.
- На этот раз вызовем метод POST, куда передаем следующий параметры : url – адрес нашего сервера, parameters – параметры для передачи, progress – необходим для отслеживания процесса загрузки, поставим для него значение nil, затем у нас идут два блока: success – если запрос выполнился удачно и failure – если неудачно.
- В блоке success напечатаем наш response –ответ с сервера.
- В блоке failure выведем ошибку из-за которой наш запрос не выполнился.
Download
Для загрузки документов необходимо использовать второй тип менеджера AFURLSessionManager. Для загрузки на сервер и с него воспользуемся сервисом http://example.com.
- (void) testDownloadRequest {
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
}
При удачном выполнении запроса мы получим следующий вывод
Опишем наши действия по шагам:
- Создаем NSURLSessionConfiguration, который позволяет настраивать конфигурации для нашего запроса.
- Создаем NSURL, который будет содержать наш адрес, на который мы отправим наш запрос.
- Ну и конечно наш AFURLSessionManager менеджер.
- Создаем NSURLRequest, который является экземпляром нашего запроса.
- Затем NSURLSessionDowloadTask – задача для нашей загрузки
- Вызываем метод downloadTaskWithRequest, куда передаём наши параметры: request – наш экземпляр запроса, progress – nil, destination – местоположение загружаемого документа, completionHandler – блок в котором печатаем путь куда закачался файл.
Заключение
В этой статье мы рассмотрели основы библиотеки замечательной библиотеки AFNetworking, мы также научились правильно использовать типы менеджеров под разные типы запросов.
Автор фото: @madeawkward
Спасибо за внимание.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.