Search code examples
iosjsonweb-servicesafnetworkingrestkit

Restkit basic url response


I am learning Rest-kit. i am trying to parse this url https://api.coursera.org/api/catalog.v1/courses?fields=language,shortDescription

I have created one Courses class.

@interface Courses : NSObject

@property (nonatomic, strong) NSString *name;

@end

and in viewcontroller i have wrote below code

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self configureRestKit];
    [self loadCourses];
}

- (void)configureRestKit
{

    //  https://api.coursera.org/api/catalog.v1/courses?fields=language,shortDescription

    // initialize AFNetworking HTTPClient
    NSURL *baseURL = [NSURL URLWithString:@"https://api.coursera.org"];
    AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

    // initialize RestKit
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];

    // setup object mappings
    RKObjectMapping *courseMapping = [RKObjectMapping mappingForClass:[Courses class]];
    [courseMapping addAttributeMappingsFromDictionary:@{
                                                       @"name":@"name"
                                                       }];
    // register mappings with the provider using a response descriptor
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:courseMapping method:RKRequestMethodGET pathPattern:@"/api/catalog.v1/courses?fields=language,shortDescription" keyPath:@"elements" statusCodes:[NSIndexSet indexSetWithIndex:200]];
    [objectManager addResponseDescriptor:responseDescriptor];
}

- (void)loadCourses
{
    [[RKObjectManager sharedManager] getObjectsAtPath:@"/api/catalog.v1/courses?fields=language,shortDescription" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        NSLog(@"%@", mappingResult.array);

    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@"What do you mean by 'there is no Courses?': %@", error);
    }];
}

ERROR :_Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No response descriptors match the response loaded." I am not getting response in success block. Please correct me. Thanks in advance


Solution

  • Don't add your query parameters to the path pattern on the response descriptor, and set them as parameters on the request:

    pathPattern:@"/api/catalog.v1/courses"
    

    generally I would also say that /api/catalog.v1/ should be part of the base URL so you would have:

    NSURL *baseURL = [NSURL URLWithString:@"https://api.coursera.org/api/catalog.v1/"];
    ...
    ... pathPattern:@"courses" ...
    ...
    ... getObjectsAtPath:@"courses" parameters:@{ @"fields" : @"language,shortDescription" } ...