0

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

Если я запустил команду 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/ 

Objective-C код:

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); 
      }]; 
+0

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

ответ

0

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

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