Основы сетевого взаимодействия с использованием библиотеки 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]);
}];

}

При удачном выполнении запроса мы получим следующий вывод

1

Опишем наши действия по шагам:

  • Создаем 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]);
}];

}

При удачном выполнении запроса мы получим следующий вывод

2

Опишем наши действия по шагам:

  • Создаем 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];
}

При удачном выполнении запроса мы получим следующий вывод

3

Опишем наши действия по шагам:

  • Создаем NSURLSessionConfiguration, который позволяет настраивать конфигурации для нашего запроса.
  • Создаем NSURL, который будет содержать наш адрес, на который мы отправим наш запрос.
  • Ну и конечно наш AFURLSessionManager менеджер.
  • Создаем NSURLRequest, который является экземпляром нашего запроса.
  • Затем NSURLSessionDowloadTask – задача для нашей загрузки
  • Вызываем метод downloadTaskWithRequest, куда передаём наши параметры: request – наш экземпляр запроса, progress – nil, destination – местоположение загружаемого документа, completionHandler – блок в котором печатаем путь куда закачался файл.

 

Заключение

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

Автор фото: @madeawkward

Спасибо за внимание.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.