{"id":11072,"date":"2015-02-18T14:32:50","date_gmt":"2015-02-18T13:32:50","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11072"},"modified":"2016-02-03T17:14:38","modified_gmt":"2016-02-03T16:14:38","slug":"afnetworking-una-libreria-per-semplificare-il-networking-di-un-app","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/afnetworking-una-libreria-per-semplificare-il-networking-di-un-app\/","title":{"rendered":"AFNetworking: una libreria per semplificare il networking di un app"},"content":{"rendered":"<p>Quale\u00a0<strong>sviluppatore\u00a0di applicazioni\u00a0iPhone e Android<\/strong>\u00a0non si \u00e8 mai\u00a0imbattuto nell&#8217;interfacciamento della propria\u00a0app con un back-end web o delle API esterne? Probabilmente nessuno. Infatti, chi prima, chi dopo, ma\u00a0ognuno di noi si \u00e8 trovato\u00a0a dover utilizzare dati provenienti dal web all&#8217;interno della\u00a0propria app.\u00a0In articoli precedenti \u00e8 stato spiegato come implementare il\u00a0proprio back-end; ma come gestire le chiamate web dentro l&#8217;app? Apple fornisce alcune API native, ma spesso sono complesse da utilizzare. Un alternativa valida e molto potente \u00e8 <strong>AFNetworking<\/strong>, una libreria usatissima nello sviluppo iOS creata e mantenuta da <a href=\"http:\/\/github.com\/mattt\" target=\"_blank\">Mattt Thompson<\/a>.<\/p>\n<p><strong><em>Installazione<\/em><\/strong><\/p>\n<p>Per installarla \u00e8 sufficiente usare Cocoapods: nel file Pods inserire questa riga:<\/p>\n<pre><code>pod 'AFNetworking', '~&gt; 2.4'<\/code><\/pre>\n<p>Come tutte le librerie Cocoapods, baster\u00e0 poi il comando &#8220;pod install&#8221; per ritrovarsi tutto configurato e pronto per essere utilizzato.<\/p>\n<p><em><strong>Le funzioni basilari<\/strong><\/em><\/p>\n<p>AFNetworking \u00e8 in grado di sostituire, o meglio integrarsi, con tutte le funzioni basilari per effettuare chiamate web.<\/p>\n<p>La pi\u00f9 classica funzione per ottenere dati da un sito web con una chiamata GET necessit\u00e0 di solo due righe di codice:<\/p>\n<pre class=\"lang:objc decode:true\">AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];\r\n[manager GET:@\"http:\/\/esempio.it\/file.json\" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {\r\n    NSLog(@\"JSON: %@\", responseObject);\r\n} failure:^(AFHTTPRequestOperation *operation, NSError *error) {\r\n    NSLog(@\"Error: %@\", error);\r\n}];<\/pre>\n<p>Molto pi\u00f9 veloce rispetto al\u00a0codice richiesto dalle API base Apple!<\/p>\n<p>Una caratteristica molto utile \u00e8 anche il parsing automatico dei file JSON, trasformando velocemente in un oggetto Cocoa la chiamata web. Esistono anche altri parser integrati nella libreria per gestire ad esempio XML, immagini e altri tipi di dati per velocizzare lo sviluppo web.<\/p>\n<p>Oltre al metodo GET esistono ovviamente altri metodi con la stessa implementazione per le varie tipologie di chiamate web: POST, PUT, DELETE etc.<\/p>\n<p>La libreria include inoltre anche funzioni per download e upload semplificando (e non poco) il networking della vostra app.<\/p>\n<p>Per tutte le informazioni potete visitare la pagina ufficiale della libreria su github:\u00a0<a href=\"https:\/\/github.com\/AFNetworking\/AFNetworking\" target=\"_blank\">https:\/\/github.com\/AFNetworking\/AFNetworking<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quale\u00a0sviluppatore\u00a0di applicazioni\u00a0iPhone e Android\u00a0non si \u00e8 mai\u00a0imbattuto nell&#8217;interfacciamento della propria\u00a0app con un back-end web o delle API&#8230;<\/p>\n","protected":false},"author":557,"featured_media":11285,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[42,30,481],"tags":[1309,1497,800,413,1496],"class_list":["post-11072","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-materiale-open-source","category-risorse-utili","tag-afnetworking","tag-librerie-cocoapods","tag-librerie-ios","tag-programmare-iphone","tag-risorse-ios-devs"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11072","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\/557"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11072"}],"version-history":[{"count":7,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11072\/revisions"}],"predecessor-version":[{"id":11721,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11072\/revisions\/11721"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11285"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}