Разработчик back-end дал эти инструкции в POST-запросах:
- Маршрут: {url}/{app_name/{controller}/{действие}
- Контроллер и действие должны быть на маленьких шапках.
- Ссылка на тест API: http: ****************
- Запрос должен использовать метод POST.
- Параметры должны проходить через тело содержимого запроса (FormUrlEncodedContent).
- Параметры должны быть в формате json.
- Параметры чувствительны к ключам.
Не имея опыта работы с номером 5 в протоколе, я искал и заканчивал свой код.
-(id)initWithURLString:(NSString *)URLString withHTTPMEthod:(NSString *)method withHTTPBody:(NSDictionary *)body {
_URLString = URLString;
HTTPMethod = method;
HTTPBody = body;
//set error message
errorMessage = @"Can't connect to server at this moment. Try again later";
errorTitle = @"Connection Error";
return self;
}
-(void)fireConnectionRequest {
NSOperationQueue *mainQueue = [[NSOperationQueue alloc] init];
[mainQueue setMaxConcurrentOperationCount:5];
NSError *error = Nil;
NSURL *url = [NSURL URLWithString:_URLString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData *sendData = [NSJSONSerialization dataWithJSONObject:HTTPBody options:NSJSONWritingPrettyPrinted error:&error];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPBody: sendData];
[NSURLConnection connectionWithRequest:request delegate:self];
NSString *jsonString = [[NSString alloc]initWithData:sendData encoding:NSUTF8StringEncoding];
//fire URL connectiion request
[NSURLConnection sendAsynchronousRequest:request queue:mainQueue completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error) {
//get the return message and transform to dictionary
NSString *data = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
returnMessage = [NSJSONSerialization JSONObjectWithData: [data dataUsingEncoding:NSUTF8StringEncoding]
options: NSJSONReadingMutableContainers
error:&error];
//check return message
if (!error) {
[delegate returnMessageForTag:self.tag];
}
else {
[delegate returnErrorMessageForTag:self.tag];
}
}];
}
Я передаю словарь, отформатированный в JSON. он согласен с тем, что я смог передать правильные данные. И мне удалось подключиться к API, но он всегда возвращает "FAILED", когда я пытаюсь отправить данные для регистрации. В связи с этим нет никаких проблем, но мне не удалось передать данные.
Разработчик Android с использованием того же API не имеет с этим проблем, но не смог помочь мне, так как он не знаком с iOS.
Что мне не хватает?