Sono nuovo nello sviluppo di iOS e ho difficoltà a effettuare una semplice richiesta JSON POST. Ho un NSDictionary contenente un utente e una password e voglio inviare quei valori come Json a un server e ottenere una risposta. L'ho fatto funzionare senza usare il restkit ma non riesco a capire come ottenere lo stesso usando RestKit e non riesco a trovare un buon esempio di ciò che voglio.Esegui un semplice POST utilizzando RESTKit
- (bool) login{
NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setValue:self.email forKey:@"email"];
[params setValue:self.password forKey:@"password"];
NSMutableDictionary* rpcData = [[NSMutableDictionary alloc] init];
[rpcData setValue:@"2.0" forKey:@"jsonrpc"];
[rpcData setValue:@"authenticate" forKey:@"method"];
[rpcData setValue:@"" forKey:@"id"];
[rpcData setValue:params forKey:@"params"];
[[RKClient sharedClient] post:@"/api/rpc/" params:rpcData delegate:self];
return nil;
}
Il server è in attesa di un JSON come questo:
{
jsonrpc : '2.0',
method : 'authenticate', // method name goes here
params : { // params are method-specific
email : '[email protected]',
password : 'secret'
},
id : 2 // The id can be anything, it will be sent back with the response
}
ho capito che c'è un parser JSON includono in RestKit ma non riesco a trovare alcuna documentazione su come analizzare il mio dizionario rpcData, devo usare una libreria esterna?
In questo momento la comunicazione con il server è ok, ma non invio quello che ci si aspetta. Il mio dizionario è mappato come "chiave = valore? Key2 = valore2 ...". Questa è una domanda molto sciocca, ma sono bloccato.
Aggiornamento
Con il tempo ho scritto questo, ha funzionato ma Restkit è stato aggiornato in modo non sono sicuro se questo funzionerà, si prega di controllare la loro documentazione
Ecco la soluzione per il mio problema, quello che sto facendo è ideale per lavorare con le API RPC quando è necessario chiamare un servizio:
1.- Prima nell'oggetto è necessario importare Restkit e RKRequestSerialization, questo è molto importante:
#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>
@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>
2.- Ecco la funzione di login di invio del post:
- (void) login:(NSString *)username :(NSString *)password{
RKClient *myClient = [RKClient sharedClient];
NSMutableDictionary *rpcData = [[NSMutableDictionary alloc] init ];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
//User and password params
[params setObject:password forKey:@"password"];
[params setObject:username forKey:@"email"];
//The server ask me for this format, so I set it here:
[rpcData setObject:@"2.0" forKey:@"jsonrpc"];
[rpcData setObject:@"authenticate" forKey:@"method"];
[rpcData setObject:@"" forKey:@"id"];
[rpcData setObject:params forKey:@"params"];
//Parsing rpcData to JSON!
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
NSError *error = nil;
NSString *json = [parser stringFromObject:rpcData error:&error];
//If no error we send the post, voila!
if (!error){
[[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send];
}
}
Non è chiaro quale sia il problema. I dati non vengono inviati? Non viene ricevuto? Che aspetto hanno le intestazioni di richiesta e risposta? Considerare l'utilizzo di http://www.charlesproxy.com/ per aiutare. Inoltre, non dimenticare di selezionare il segno di spunta verde accanto alla risposta migliore per le tue domande precedenti. Riceverai più risposte in questo modo. –
Nel modo in cui è il mio codice, non sto inviando una richiesta JSON.Ho chiaro, il server sta ricevendo dati come "? Jsonrpc = '2.0' & method = 'authenticate' ..." Ho bisogno di sapere come analizzarlo in un JSON – clopez
Puoi controllare la richiesta inviata da Restkit attivando il log di debug tramite questa riga nel codice 'RKLogConfigureByName (" RestKit/Network ", RKLogLevelTrace);' – redDragonzz