{"id":6682,"date":"2011-04-21T14:50:47","date_gmt":"2011-04-21T12:50:47","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=6682"},"modified":"2011-04-21T14:50:47","modified_gmt":"2011-04-21T12:50:47","slug":"asihttprequest-creare-richieste-http-e-interagire-con-webservice-rest-dalle-nostre-applicazioni-iphone-e-ipad","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/asihttprequest-creare-richieste-http-e-interagire-con-webservice-rest-dalle-nostre-applicazioni-iphone-e-ipad\/","title":{"rendered":"ASIHTTPRequest: creare richieste HTTP e interagire con webService REST dalle nostre applicazioni iPhone e iPad"},"content":{"rendered":"<p>Ciao Ragazzi, oggi vi volevo parlare di una libreria molto interessante: ASIHTTPRequest! A cosa serve? ASIHTTPRequest ci permetter\u00e0 in modo davvero semplice di comunicare con un web service e, in particolare, potremo creare richieste HTTP e interagire con servizi REST (GET, POST, PUT, DELETE). Credo che questa che sto per presentarvi sia la libreria pi\u00f9 completa e, non meno importante, piu semplice, da utilizzare durante lo sviluppo delle nostre applicazioni iPhone e iPad.<!--more--><\/p>\n<h4>Preparare un progetto per l&#8217;uso di ASIHTTPRequest<\/h4>\n<p>Prima cosa, dovremo scaricare questa libreria, per farlo possiamo passare attraverso questo <a href=\"http:\/\/github.com\/pokeb\/asi-http-request\/tarball\/master\" target=\"_blank\">link diretto<\/a>.<br \/>\nUna volta ottenuta decomprimiamo il file appena scaricato, apriamo quindi il nostro progetto Xcode per iPhone ed entriamo nel gruppo &#8220;Classes&#8221;. A questo punto dobbiamo copiare tutti i file al suo interno (tranne le ultime 3 cartelle) e importateli nel progetto stesso (ricordiamoci di spuntare l&#8217;opzione che ci permetter\u00e0 di copiare effettivamente i file all&#8217;interno del progetto).<\/p>\n<p>Copiamo ancora i file <em>Reachability<\/em>, sempre all&#8217;interno del nostro progetto e concludiamo i preparativi importando infine i seguenti framework:<\/p>\n<ul>\n<li>CFNetwork, <\/li>\n<li>SystemConfiguration,<\/li>\n<li> MobileCoreServices,<\/li>\n<li> libz.1.2.3.dylib<\/li>\n<\/ul>\n<p>Bene, ora tutto \u00e8 pronto e non ci resta che utilizzare la risorsa che abbiamo appena scaricato e importato per realizzare le nostre richieste.<\/p>\n<h4>Come funziona ASIHTTP?<\/h4>\n<p>Vediamo qualche esempio di codice per capire come usare ASIHTTPRequest nelle nostre app. Supponiamo di dover creare una richiesta in POST in cui allegheremo delle stringhe e dei file.<\/p>\n<p>Innanzitutto importiamo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"ASIFormDataRequest.h\"\r\n<\/pre>\n<p>Quindi, cos\u00ec, creiamo la nostra richiesta:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\nASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlString]];\r\n    [request setPostValue:mail forKey:@\"usermail\"];\r\n    [request setPostValue:idVersione forKey:@\"versionid\"];\r\n    [request setFile:path forKey:@\"userfile\"];\r\n    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0\r\n\t[request setShouldContinueWhenAppEntersBackground:YES];\r\n    #endif\r\n\t[request setDelegate:self];\r\n\t[request setDidFailSelector:@selector(uploadFailed:)];\r\n\t[request setDidFinishSelector:@selector(uploadFinished:)];\r\n    [request startSynchronous];\r\n<\/pre>\n<p>Vediamo cosa abbiamo fatto. Semplicemente, nella prima riga inizializziamo la request inserendo in <em>urlString<\/em> l&#8217;indirizzo a cui inviare la richiesta, poi aggiungiamo i valori, <em>mail<\/em> per &#8220;usermail&#8221;, <em>idVersione<\/em> per &#8220;versionid&#8221; e in fine alleghiamo un file dandogli il path e la chiave (naturalmente i paramentri andranno settati secondo le proprie richieste ed esigenze).<\/p>\n<p>Se l&#8217;iOS installato \u00e8 maggiore o uguale alla 4.0 allora il background \u00e8 supportato, quindi facciamo s\u00ec che l&#8217;app entri in background continuando ad inviare la richiesta, impostiamo quindi il Delegate e infine settiamo i due metodi utili quando o l&#8217;upload fallisce oppure termina semplicemente.<\/p>\n<p>Vediamo ora il codice di implementazione dei due metodi appena citati:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)uploadFailed:(ASIHTTPRequest *)theRequest\r\n{\r\n\t\/\/[resultView setText:[NSString stringWithFormat:@\"Request failed:\\r\\n%@\",[[theRequest error] localizedDescription]]];\r\n    NSLog(@\"Request failed:\\r\\n%@\",[[theRequest error] localizedDescription]);\r\n    \r\n    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@\"Error\" \r\n                                           message: [[theRequest error] localizedDescription]\r\n                                          delegate:nil cancelButtonTitle:@\"Ok\" \r\n                                 otherButtonTitles:nil];\r\n    <div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n    <div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n    \r\n}\r\n\r\n- (void)uploadFinished:(ASIHTTPRequest *)theRequest\r\n{\r\n\t\/\/[resultView setText:[NSString stringWithFormat:@\"Finished uploading %llu bytes of data\",[theRequest postLength]]];\r\n    NSLog(@\"Finished uploading %llu bytes of data\",[theRequest postLength]);\r\n   \r\n}\r\n<\/pre>\n<p>Come vedete, niente di particolare.<br \/>\nCosi facendo abbiamo creato, con poche righe di codice, una request in POST.<\/p>\n<h4>Conclusioni<\/h4>\n<p>Naturalmente ASIHTTPRequest offre molte pi\u00f9 possibilit\u00e0 di quanto mostrato, come per esempio potremmo ottenere il progresso dell&#8217;upload o download di un file o ancora la potremo creare form di login o sfruttare https. Insomma, questa \u00e8 solo una piccola guida introduttiva a questa interessante ed utilissima libreria, per ulteriori dettagli vi rimando a <a href=\"http:\/\/allseeing-i.com\/ASIHTTPRequest\/How-to-use\" target=\"_blank\">questo indirizzo<\/a>, in cui troverete la pi\u00f9 completa documentazione a riguardo (in inglese) che ho trovato fino ad ora navigando in giro per il web.<\/p>\n<p>Buon lavoro e alla prossima, magari con qualche bel tutorial pi\u00f9 completo!<br \/>\nAndrea<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ciao Ragazzi, oggi vi volevo parlare di una libreria molto interessante: ASIHTTPRequest! A cosa serve? ASIHTTPRequest ci&#8230;<\/p>\n","protected":false},"author":136,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[8,30,481,7],"tags":[270,707,718,30,719,717,720],"class_list":["post-6682","post","type-post","status-publish","format-standard","hentry","category-guide-varie","category-materiale-open-source","category-risorse-utili","category-strumenti-di-sviluppo","tag-andrea-cappellotto","tag-asihttp","tag-iphone-e-webservice-rest","tag-materiale-open-source","tag-richieste-get-iphone","tag-richieste-http-iphone","tag-richieste-post-iphone-ipad"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/136"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=6682"}],"version-history":[{"count":5,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6682\/revisions"}],"predecessor-version":[{"id":6723,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6682\/revisions\/6723"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=6682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=6682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=6682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}