Jestem nowy w rozwoju iOS i mam problem z wykonaniem prostego żądania JON POST. Mam NSDictionary zawierający użytkownika i hasło i chcę wysłać te wartości jako Json do serwera i uzyskać odpowiedź. Miałem to działające bez używania pakietu restkit, ale nie mogę wymyślić, jak osiągnąć to samo używając narzędzia RestKit i po prostu nie mogę znaleźć dobrego przykładu tego, czego chcę.Wykonaj prosty test POST przy użyciu programu 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;
}
Serwer oczekuje JSON tak:
{
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
}
Rozumiem, że istnieje parser Json obejmują w RestKit ale nie mogę znaleźć żadnej dokumentacji na temat sposobu analizowania mojego słownika rpcData, czy muszę korzystać z biblioteki zewnętrznej ?.
W tej chwili komunikacja z serwerem jest w porządku, ale nie wysyłam tego, co jest oczekiwane. Mój słownik jest odwzorowany w sposób "key = value? Key2 = value2 ...". To bardzo głupie pytanie, ale utknąłem.
Aktualizacja
Kiedy to pisałem, to działało ale Restkit został zaktualizowany, więc nie jestem pewien, czy to będzie działać, sprawdź ich dokumentację
Oto rozwiązanie na mój problem, to co robię jest idealne do pracy z API RPC, kiedy musisz zadzwonić do usługi:
1.- Najpierw w twoim obiekcie musisz zaimportować Restkit i RKRequestSerialization, to jest bardzo ważne:
#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>
@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>
2.- Oto funkcja logowania wysyłając wiadomość:
- (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];
}
}
Nie jest jasne, jaki jest problem. Czy dane nie są wysyłane? Nie otrzymałeś? Jak wyglądają twoje nagłówki zapytań i odpowiedzi? Rozważ skorzystanie z http://www.charlesproxy.com/ w celu uzyskania pomocy. Nie zapomnij również zaznaczyć zielonego znacznika wyboru obok najlepszej odpowiedzi na poprzednie pytania. Otrzymasz więcej odpowiedzi w ten sposób. –
W sposób w jaki mój kod jest, nie wysyłam żądania JSON.Mam to jasne, serwer uzyskuje dane takie jak "? Jsonrpc = '2.0' & method = 'authenticate' ..." Muszę wiedzieć, jak przeanalizować to w JSON – clopez
Możesz sprawdzić żądanie wysłane przez Restkit, aktywując dziennik debugowania za pośrednictwem tego wiersza w kodzie 'RKLogConfigureByName (" RestKit/Network ", RKLogLevelTrace);' – redDragonzz