Soy nuevo en el desarrollo de iOS y tengo problemas para hacer una simple solicitud de JSON POST. Tengo un NSDictionary que contiene un usuario y una contraseña y deseo enviar esos valores como un Json a un servidor y obtener una respuesta. Lo hice funcionar sin usar el kit de recuperación, pero no puedo encontrar la manera de lograrlo utilizando RestKit y simplemente no puedo encontrar un buen ejemplo de lo que quiero.Haz un POST simple de json usando 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;
}
El servidor está esperando un JSON como esto:
{
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
}
entiendo que hay un analizador JSON incluyen en RestKit pero no puedo encontrar ninguna documentación sobre cómo analizar mi diccionario rpcData, ¿Necesito usar una biblioteca externa ?.
En este momento la comunicación con el servidor está bien, pero no estoy enviando lo que se espera. Mi diccionario está mapeado de la forma "clave = valor? Clave2 = valor2 ...". Esta es una pregunta muy tonta pero estoy sorprendido.
actualización
En el momento de escribir este, funcionó pero Restkit se ha actualizado así que no estoy seguro de si esto va a funcionar, compruebe su documentación
Aquí está la solución a mi problema, lo que estoy haciendo es ideal para trabajar con las API RPC cuando se necesita llamar a un servicio:
1.- en primer lugar, en el objeto que necesita importar Restkit y RKRequestSerialization, esto es muy importante:
#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>
@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>
2.- Aquí es la función de inicio de sesión de enviar el mensaje:
- (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];
}
}
No está claro cuál es el problema. ¿No se están enviando los datos? No ser recibido? ¿Cómo son tus encabezados de solicitud y respuesta? Considere usar http://www.charlesproxy.com/ para ayudar. Y también, no olvide marcar la marca verde al lado de la mejor respuesta para sus preguntas anteriores. Obtendrás más respuestas de esa manera. –
En la forma en que mi código es, no estoy enviando una solicitud JSON.Lo tengo claro, el servidor está obteniendo datos como "? Jsonrpc = '2.0' & method = 'authenticate' ..." Necesito saber cómo analizar eso en un JSON – clopez
Puede verificar la solicitud enviada por Restkit activando el depurar el registro a través de esta línea en el código 'RKLogConfigureByName (" RestKit/Network ", RKLogLevelTrace);' – redDragonzz