вторник, 25 февраля 2014 г.

Работа с интернетом. Упрощаем себе работу



  Немного поразмыслив, я заметил, что работа с интернетом, а в частности с запросами на разного рода сайты и получение данных, в моем случае json,  занимает слишком много времени. Организация множества запросов требует достаточно много кода и нервов, в особенности когда у вас 30+ запросов и каждый требует отдельную обработку.

  Поколдовав немного со старым ASIHTTPRequest, CDFileManager и SBJsonParser, написал довольно простую, но эффективную надстройку, которая позволила без каких либо усилий заменить тонны кода на небольшой класс исполнявшего роль "моста".
  
  Пример я выложил, поэтому разберу несколько основных моментов
  Как я раньше упоминал - понадобиться ASIHTTPRequest, CDFileManager и SBJsonParser, а также два класса из примера - NetworkRequestClass &  RequestParamClass.

  

    RequestParamClass * requestObject = [[RequestParmClass alloc]init];
    // url
    requestObject.urlRequest = @"";
    // id/tag request need if we have more the one requests
    // use some enum
    requestObject.idRequest = 1;
    requestObject.typeRequest = @"POST";
    // some params if need
    [requestObject.paremsRequest setObject:[NSNumber numberWithInt:876] forKey:@""];
    // save data to device
    requestObject.cashing = YES;
    // name by save .plist
    requestObject.nameRequest = @"First_Request";
    
    network = [[NetworkRequestClass alloc]init];
    network.delegate = self;
    [network sendPostRequest:requestObject];



    #pragma mark - Network answer
    -(void)requestAnswer:(id)answer withID:(int)tag{
         NSLog(@"respone %d ===> %@",tag,answer);
    }


  RequestParamClass - класс контейнер для нашего запроса: url, параметры, а также еще несколько плюшек прикрученных мною для удобства.

  idRequwest - одно из самых важных полей, я подобный способ применял во wrapper-е для Однокласников. Это тег запроса, что бы после получения ответа мы точно знали на какой именно запрос из массы, мы получили ответ. Рекомендуется для логирования запросов использовать какой нибудь enum.

  typeRequest - думаю тут нечего объяснять - POST или GET.

  cashing - еще одна приятная плюшка. Я сначала подумал нужна ли вообще она, но потом решил - пригодится. Кеширование в память, а точнее сохранение разобранного json в plist. Сюда же и относится nameRequest - имя plist файла.

  NetworkRequestClass - и есть wrapper над ASI. Мы загружаем наш контейнер и в requestAnswer ловим ответ)

  Надеюсь кому нибудь это поможет - успехов;)

  Сылка на исходники в github репозитории.




Комментариев нет :

Отправить комментарий