Как реализовать метод HTTP PUT REST API для обновления записи в MongoDB с помощью AFNetworking?

Я создал полный RESTful API, используя node.js и mongoDB. Используя AFNetworking, я мог бы легко реализовать GET для получения списка продуктов через API, но у меня возникли проблемы с использованием метода PUT для обновления записи. Идея состоит в том, чтобы проверить, есть ли запись для этой UUIDString, если есть, обновить запись.

Если я запускаю команду cURL в терминале. Это будет работать:

Modify with _id value of 6FDCBF3D:

curl -i -X PUT -H 'Content-Type: application/json' -d '{"name": "someName", "someValue": "15"}' http://localhost:3000/iaps/6FDCBF3D/

Код цели-с:

NSURL *baseURL = [[NSURL alloc] initWithString:@"http://localhost:3000/iaps/"];
           // NSString *uuid = [UIDevice currentDevice].identifierForVendor.UUIDString;
            AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
            [client getPath:@"6FDCBF3D" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
                NSError *jsonError = nil;
                NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:(NSData *)responseObject options:NSJSONReadingMutableContainers error:&jsonError];
//                NSLog(@"Return object: %@", json);
                if (json) {
                    NSString *purchasedPkg = [productIdentifier pathExtension];
                    if ([purchasedPkg isEqualToString:@"productA"]) {
                        NSString *oldPkg = [json objectForKey:@"somevalue"];
                        int newPkgVal = oldPkg.intValue + 1;
                        NSString *newPkg = [NSString stringWithFormat:@"%d",newPkgVal];
                        [json setValue:newPkg forKey:@"somevalue"];
                    }

                    NSMutableURLRequest *request = [client requestWithMethod:@"PUT" path:@"6FDCBF3D" parameters:nil];
                    request.HTTPBody = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingPrettyPrinted error:&jsonError];
                    AFHTTPRequestOperation *op = [client HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
                        NSLog(@"put success");
                    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                        NSLog(@"put failed");
                    }];
                }
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                NSLog(@"%@", error);
            }];

person iCanObjSeeSharp    schedule 29.07.2013    source источник
comment
Просто подсказка: как минимум вы должны проверить код состояния HTTP, который определяет, действительно ли ваш запрос был успешным. Также проверьте, действительно ли вы получили JSON. В противном случае, если что-то пойдет не так, вы можете получить JSON, содержащий описание ошибки, или вообще не получить JSON — скажем, в случае ошибки сервера он может вернуть текст/html. Если это произойдет, ваш метод завершится неудачно или где-то еще. Используйте модульные тесты, чтобы убедиться, что ваш клиентский API работает даже в случае сбоя.   -  person CouchDeveloper    schedule 29.07.2013


Ответы (1)


AFNetworking предоставляет метод put следующим образом:

- (void)putPath:(NSString *)path 
     parameters:(NSDictionary *)parameters 
        success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
person cahn    schedule 29.07.2013