iOS上的AWS API网关

问题描述:

我正在使用NSURL连接到我的API网关,而我在iOS设备上收到的响应是“缺少身份验证令牌”。我检查了我是否部署了我的API。它可以通过Chrome和Safari使用相同的URL访问并返回完整填充的json。iOS上的AWS API网关

我的代码:

NSString* urlString = [NSString stringWithFormat:@"https://csjm26qn0c.execute-api.us-east-1.amazonaws.com/dev/truckstopsregion1/1"]; 
NSURL *url = [NSURL URLWithString: urlString]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[url standardizedURL]]; 

[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:@"...NOT GOING TO SHOW..." forHTTPHeaderField:@"API-Key"]; 


NSURLSession* session = [NSURLSession sharedSession]; 
NSURLSessionDataTask* task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
    if(error == nil && data != nil){ 

     NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

    } 
}]; 

[task resume]; 

我看到两个问题,您的API网关接入。

  1. 你的终点可能不被设置为处理POST请求。您的网址会从GET请求中返回数据。我将POST更改为GET,我可以获取JSON数据。当所请求的端点不存在时,“Missing Authentication Token”消息也是一个通用消息。

  2. 返回的JSON格式错误。检查语法。我发布了我从URL中收到的JSON字典。它在经线上缺少一个逗号。

    { 
        "Stops" : 
        [ 
         { 
          "id"  : "1", 
          "latitude" : "300", 
          "longitude": "400" 
          "name"  : "Test Stop 2" 
         } 
        ] 
    } 
    
+0

建议补充说,“缺少身份验证令牌”消息是用于对上述请求端点不存在,以及一个通用的消息(你的第一个子弹的情况下)。 –

+1

@AndrewTempleton完成:) – Daniel

+0

Upvoted雅,很好的回答 –

ApiGateway可以自动生成SDK的适用于iOS,Android和JavaScript的。虽然这不能回答你的问题,但使用自动生成的SDK将(可能)为你解决问题。

看看文档在这里:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk.html#how-to-generate-sdk-console