2009-10-12 11 views
29

è stato lottare con questo per un po 'di tempo. Sto cercando di accedere a una API REST sul mio iphone e ho trovato il framework ASIHTTP che mi avrebbe aiutato. Così ho fatto qualcosa di simileObjective-C: il modo migliore per accedere all'API REST sul tuo iPhone

//call sites, so we can confirm username and password and site/sites 
NSURL *url = [NSURL URLWithString: urlbase]; 
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; 
[request setUsername:@"doronkatz%40xx.com" ]; 
[request setPassword:@"xxx"]; 

Dove urlbase è un URL a un sito REST.

Ora uno sviluppatore mi ha detto che potrebbe esserci un problema o un bug con questo framework e le intestazioni non passanti correttamente. C'è un altro modo per testare o accedere con l'autenticazione a una posizione REST di rete?

+1

+1 A seguito di questa domanda, tuttavia, è necessario formattare il codice in modo che SO possa visualizzarlo correttamente. Non posso modificare altrimenti lo farei, ma metto 4 spazi davanti a ciascuna riga del tuo codice e sembrerà un codice. –

+0

Scusate amico amico lo faccio in futuro – Doz

+0

http://github.com/sdegutis/CocoaREST – indragie

risposta

31

Si consiglia di verificare RestKit: http://restkit.org/ Fornisce un'eccellente API per l'accesso ai servizi Web RESTful e la rappresentazione delle risorse remote come oggetti locali, inclusa la loro permanenza su Core Data. L'autenticazione HTTP è supportata immediatamente.

+2

in 0.20.0 come viene eseguita l'autenticazione di base? Gli unici esempi che riesco a trovare si riferiscono a 'RKClient', tuttavia questo è stato rimosso in 0.20.0. Il tuo aiuto è molto apprezzato. –

6

Ho un paio di app che utilizzano un framework chiamato Objective Resource che fornisce un wrapper per l'accesso alle API basate su REST remoto. Si rivolge principalmente alle applicazioni basate su Ruby on Rails, quindi è possibile sintonizzare l'analisi XML/JSON per gestire alcune impostazioni predefinite di Rails, ma vale la pena esaminare. Supporta l'autenticazione di base http per impostazione predefinita.

1

Ho utilizzato ASIHTTP in due app finora e non ho avuto problemi.

Sembra che tu stia facendo l'autenticazione di base HTTP con il sito remoto. Prova a colpire lo stesso URL REST da un browser standard e passa i parametri necessari. Dovrebbe essere richiesto nome utente/password. Se riesce, allora almeno sai che il lato server è configurato per gestire le richieste. In caso contrario, è necessario parlare con il dev.

La prossima cosa da provare è mettere uno sniffer di rete basato su Mac e vedere quali intestazioni vanno avanti e indietro. Qualsiasi HTTPScoop, Wireshark o Charles dovrebbe funzionare. Esegui lo sniffer come proxy di rete, quindi esegui la tua app nel simulatore e guarda cosa succede. Provalo di nuovo con il browser. Una volta visualizzate le differenze, è possibile utilizzare il metodo addRequestHeader su ASIHTTPRequest per aggiungere intestazioni specifiche che il server si aspetta.

+0

Hi Ramin ive ha provato ad utilizzare ASIHTTPRequest, anche con l'API di Twitter per vedere se riesco a far funzionare un'intestazione, usando addRequestHeader e usando HTTPScoop ma non mostra che le intestazioni vengono passate a esso. – Doz

+0

Quali intestazioni stai cercando? E quando raggiungi lo stesso URL con il browser, ottieni quello che stai cercando in HTTPScoop? Se stai ricevendo le intestazioni dal browser ma non in ASIHTTP, allora potresti voler segnalare un bug con lo sviluppatore. – Ramin

+0

Bene per entrambi i siti su cui sto lavorando, con HTTPSchool sto ottenendo una risposta che dice che l'autenticazione è necessaria. Con Twitter, posso inserire il nome utente e la password nel file URL, ma quando lo metto come addRequestHeader HTTPSchoop non mostra di aver inserito alcuna intestazione. Ecco perché mi sto chiedendo ci deve essere qualcosa con ASIHTTP. – Doz

2

Appena inciampato su questa domanda - potresti trovare LRResty piuttosto interessante in quanto usa NSOperation, blocchi ecc., Vedi: GitHub per sorgente (licenza MIT). Ci sto provando ora - ha anche un'app campione.

10

Sono nuovo nello sviluppo di iOS e ho combattuto con alcuni dei grandi framework elencati in questa pagina per lo scorso mese o giù di lì. È stato un incubo Ti raccomando sinceramente di attenersi alle nozioni di base e farlo da solo usando AFNetworking o lo stesso NSURLConnection di Apple.

Una delle librerie elencate non viene più gestita. Un altro ha subito di recente enormi modifiche all'API code-breaking e ora metà delle esercitazioni che descrivono il suo utilizzo non funzionano più. Altri sono enormemente gonfiati.

È più facile di quanto si pensi. Alcune risorse che mi hanno aiutato:

Gli esempi sola AFNetworking homepage possono ottenere l'80% della strada.

UPDATE: Il Mantle Framework (open source da Github Inc.) è ben progettato e facile da usare. Gestisce la mappatura degli oggetti : conversione di un JSON NSDictionary nelle proprie classi di modello Objective-C personalizzate. Gestisce sensibilmente i casi predefiniti ed è piuttosto semplice eseguire il rollover dei propri trasformatori di valore, ad es. da stringa a NSURL o stringa alla tua personalizzata enum.

Problemi correlati