Я создал полный 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);
}];
Только намек: как минимум, вы должны проверить код состояния HTTP который определяет, действительно ли ваш запрос был успешным. Также проверьте, действительно ли вы получили JSON. В противном случае, если что-то пойдет не так, вы можете получить JSON, содержащий описание ошибки или вообще не JSON, - скажем, в случае ошибки сервера он может вернуть текст/html. Если это произойдет, ваш метод терпит неудачу или не сработает где-то в другом месте. Используйте модульные тесты, чтобы подтвердить, что ваш клиентский API работает даже в случае сбоев. – CouchDeveloper