Я новичок в разработке iOS, и у меня возникли проблемы с созданием простого запроса Json POST. У меня есть NSDictionary, содержащий пользователя и пароль, и я хочу отправить эти значения как Json на сервер и получить ответ. У меня была работа без использования restkit, но я не могу понять, как сделать то же самое с помощью 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;
}
Сервер ожидает Json следующим образом:
{
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
}
Я понимаю, что в RestKit есть парсер Json, но я не могу найти документацию о том, как разбирать словарь rpcData, мне нужно использовать внешнюю библиотеку?
Прямо сейчас связь с сервером это нормально, но я не отправляю то, что ожидается. Мой словарь отображается в виде "key = value? Key2 = value2...". Это очень глупый вопрос, но я застрял.
Обновление
К тому времени, как я написал это, он работал, но Restkit был обновлен, поэтому я не уверен, что это сработает, пожалуйста, проверьте их документацию
Вот решение моей проблемы, что я делаю, идеально подходит для работы с RPC API, когда вам нужно позвонить в службу:
1.- Сначала в вашем объекте вам нужно импортировать Restkit и RKRequestSerialization, это очень важно:
#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>
@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>
2.- Здесь функция входа в систему отправляет сообщение:
- (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];
}
}