Search code examples
objective-chttp-headersrestkit

How can I set dynamic headers with RestKit?


My idea is to add a signature to each request I perform to a server. I want this value in the headers so that the server can identify the client.

Here is how I currently set my manager :

@property(nonatomic, strong) RKObjectManager *manager;

...

- (void)setupManager {
  self.manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:ACCESS_POINT]];

  // Add logic here to add my dynamic header

  [self.manager.HTTPClient setDefaultHeader:@"Content-Type" value:@"application/json"];
  [self.manager.HTTPClient setDefaultHeader:@"Accept" value:@"application/json"];
  [self.manager addResponseDescriptorsFromArray:@[...];
  [self.manager addRequestDescriptorsFromArray:@[...];
}

I call setupManager only once

So I want my manager to set a header that will be different at each request, automatically for me, something like that

 // the signature method would return an encoded string with some encrypted value, different each time we call it
 [self.manager.HTTPClient setDefaultHeader:@"SIGNATURE" value:[self signature]];

Solution

  • Ok I went with the NSOperationQueue used by the AFHTTPClient

    - (void)setupManager {
      self.manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:ACCESS_POINT]];
    
      [self.manager.HTTPClient.operationQueue addOperationWithBlock:^{
        [self.manager.HTTPClient setDefaultHeader:@"SIGNATURE" value:[self signature]];
      }];
    
      [self.manager.HTTPClient setDefaultHeader:@"Content-Type" value:@"application/json"];
      [self.manager.HTTPClient setDefaultHeader:@"Accept" value:@"application/json"];
      [self.manager addResponseDescriptorsFromArray:@[...];
      [self.manager addRequestDescriptorsFromArray:@[...];
    }
    

    Let me know if you find a better way of doing it !