title: Do a simple json POST using RESTKit
body: <p>I'm new to iOS development and I'm having trouble making a simple Json POST request.
  I have a NSDictionary containing an user and password and I want to send those values as a Json to a server and get a response. I had that working without using restkit but I can't figure out how to accomplish the same using RestKit and just can't find a good example of what I want.</p>
  
  <pre><code>- (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;
  }
  </code></pre>
  
  <p>The server is expecting a Json like this:</p>
  
  <pre><code>{
      jsonrpc : '2.0',
      method : 'authenticate', // method name goes here
      params : {  // params are method-specific
          email : 'test@test.com',
          password : 'secret'
      },
      id : 2  // The id can be anything, it will be sent back with the response
  }
  </code></pre>
  
  <p>I understand that there is a Json parser include in RestKit but I can't find any documentation on how to parse my rpcData dictionary, do I need to use an external library?.</p>
  
  <p>Right now the communication with the server it's ok, but I'm not sending what is expected. My dictionary is mapped in the way "key=value?key2=value2...". This is very silly question but I'm stucked.</p>
  
  <p><strong>Update</strong></p>
  
  <p><em>By the time I wrote this, it worked but Restkit has been updated so I'm not sure if this will work, please check their documentation</em></p>
  
  <p>Here is the solution to my problem, what I'm doing is ideal for working with RPC APIs when you need to call a service:</p>
  
  <p>1.- First in your object you need to import Restkit and RKRequestSerialization, this is very important:</p>
  
  <pre><code>#import &lt;RestKit/RestKit.h&gt;
  #import &lt;RestKit/RKRequestSerialization.h&gt;
  
  @interface myObject : NSObject &lt;RKRequestDelegate,RKObjectLoaderDelegate&gt;
  </code></pre>
  
  <p>2.- Here is the login function sending the post:</p>
  
  <pre><code>- (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&lt;RKParser&gt; parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
      NSError *error = nil;
      NSString *json = [parser stringFromObject:rpcData error:&amp;error];    
  
      //If no error we send the post, voila!
      if (!error){
          [[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send];
      }
  }
  </code></pre>