Я использую экспортированный API Gateway IOS SDK. API был первоначально импортирован в шлюз API через Swagger в качестве шаблона, но с измененного с помощью портала AWS для возврата обратно к модели ответа и классу в SDK IOS. Все 200 запросов возвращаются без проблем. Я использую pod 'AWSAPIGateway', '= 2.4.1'AWS API Gateway экспортировал IOS SDK без ответа об ошибке
Проблема, с которой я сталкиваюсь, не является чем-то другим, чем 200 ответ обрабатывается и/или принимается SDK IOS. Я знаю, что он отправлен, потому что Cloudwatch показывает правильное сопоставление, но ничего не возвращается в приложении IOS.
Сначала я подумал, что, возможно, я противоречил собственным кодам ответов API Gateway, поэтому я перешел на 403, который не был в нем. Но это не сработало. Я также не получаю 500 ошибок ответа.
Вот функция вызова:
client.apiRequestPut(apiRequestVar).continueWithSuccessBlock {
(task: AWSTask!) -> AnyObject! in
print(task)
if ((task.error) != nil) {
print(task.error)
return nil;
}
if((task.result != nil)) {
print(task.result)
}
}
return nil
}
И AWS SDK Сформирован Client Функция:
- (AWSTask *)apiRequestPut:(APINewRequest *)body {
NSDictionary *headerParameters = @{
@"Content-Type": @"application/json",
@"Accept": @"application/json",
};
NSDictionary *queryParameters = @{
};
NSDictionary *pathParameters = @{
};
return [self invokeHTTPRequest:@"PUT"
URLString:@"/requestVariable"
pathParameters:pathParameters
queryParameters:queryParameters
headerParameters:headerParameters
body:body
responseClass:[APIModel class]];
}
}
Вот модель ошибки:
@implementation APIErrorModel
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"success": @"success",
@"theFunction": @"theFunction",
@"action": @"action",
@"timeStamp": @"timeStamp",
@"error": @"error",
@"data": @"data"
};
}
+ (NSValueTransformer *)timeStampJSONTransformer {
return [AWSMTLValueTransformer reversibleTransformerWithForwardBlock:^id(NSString *dateString) {
return [NSDate aws_dateFromString:dateString format:AWSDateISO8601DateFormat1];
} reverseBlock:^id(NSDate *date) {
return [date aws_stringValue:AWSDateISO8601DateFormat1];
}];
}
Вот отображение в API шлюза для кода 400 ответа:
#set($inputRoot = $input.path('$'))
{
"success" : $input.json('$.success'),
"theFunction" : "foo",
"action" : "foo",
"timeStamp" : "foo",
"error" : "foo",
"data" : $input.json('$.message')
}
Вот результирующая запись журнала Cloudwatch:
Endpoint response body before transformations:
{
"success": false,
"message": "{\"message\":\"The conditional request failed\",\"code\":\"ConditionalCheckFailedException\",\"time\":\"2016-05- 12T20:16:03.165Z\",\"statusCode\":400,\"retryable\":false,\"retryDelay\":0} "
}
Endpoint response headers: {content-length=217, Connection=keep-alive, content-type=application/json; charset=utf-8, cache-control=no-cache, Date=Thu, 12 May 2016 20:16:03 GMT
}
Method response body after transformations:
{
"success": false,
"theFunction": "foo",
"action": "foo",
"timeStamp": "foo",
"error": "foo",
"data": "{\"message\":\"The conditional request failed\",\"code\":\"ConditionalCheckFailedException\",\"time\":\"2016-05- 12T20:16:03.165Z\",\"statusCode\":400,\"retryable\":false,\"retryDelay\":0} "
}
Method response headers: {Content-Type=application/json}
Successfully completed execution
Method completed with status: 400
Но тогда я ничего не получаю получил обратно в приложение IOS ?
Любая помощь в том, что я пропала без вести, будет очень признательна!
Вы хотите рассмотреть возможность экспорта в спецификацию Swagger, а затем использовать [swagger-codegen] (https://github.com/swagger-api/swagger-codegen) для создания SDK ObjC (который поставляется с автоматически созданным документом) –