0

Я использую экспортированный 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 ?

Любая помощь в том, что я пропала без вести, будет очень признательна!

+0

Вы хотите рассмотреть возможность экспорта в спецификацию Swagger, а затем использовать [swagger-codegen] (https://github.com/swagger-api/swagger-codegen) для создания SDK ObjC (который поставляется с автоматически созданным документом) –

ответ

1

- continueWithSuccessBlock: используется, когда вы хотите извлечь только объект result из объекта задачи. Объект task в - continueWithSuccessBlock: всегда имеет nilerror. Если вы хотите получать ошибки, вам нужно вместо этого использовать - continueWithBlock:.

Дополнительную информацию см. В документации Bolts.

+0

Вот и все! Если бы это была змея, мне было бы немного – jneptune

Смежные вопросы