在AWS ApiGateway

时间:2018-07-06 13:10:55

标签: python json amazon-web-services aws-api-gateway

我正在开发API网关,以从传感器获取数据(图像)并将其发送到AWS的DynamoDB。我已经有了端点和API密钥。但是,在测试API时出现以下错误:

Request: /?image=12345  
Status:  
Latency: ms  
Response Body  
{  
  "cause": "JSONObject[\"body\"] not found.",  
  "logref": "12345-11d8-888888",  
  "message": ""  
}  

IAM的角色和策略还可以。 Python代码通过requests发布以下有效负载

payload={"image": [1,2,3,4,5]}

鉴于:

requests.posts(API_URL,files=payload,headers={'api-key':'12345abcd'})

我的身体映射模板是:

{"body" : $input.json('$')}

但是此主体映射正在GET的请求主体(不合适的请求验证器)中生成警报。

如下图所示,所有API请求都收到4xx错误。

enter image description here

DynamoDB没有接收到有效负载。有人可以给我一些可能的原因吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。有几件事需要解决:

1-我使用https://www.liquid-technologies.com/online-json-to-schema-converter

正确映射了JSON

因此,针对:

{
  "MessageID" : {
    "S" : "12345"
  },
  "type" : {
"S" : "type"
  },
  "page" : {
"S" : "page"
  }
}

...由Python发送,正文映射变为:

{
  "MessageID" : {
    "S" : "$input.params('MessageID')"
  },
  "type" : {
    "S" : "$input.params('type')"
  },
  "page" : {
    "S" : "$input.params('page')"
  }
}

和模型:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "MessageID": {
      "type": "object",
      "properties": {
        "S": {
          "type": "string"
        }
      },
      "required": [
        "S"
      ]
    },
    "type": {
      "type": "object",
      "properties": {
        "S": {
          "type": "string"
        }
      },
      "required": [
        "S"
      ]
    },
    "page": {
      "type": "object",
      "properties": {
        "S": {
          "type": "string"
        }
      },
      "required": [
        "S"
      ]
    }
  },
  "required": [
    "MessageID",
    "type",
    "page"
  ]
}

现在我得到了:

<Response [200]>
ok
<Response [200]>
ok
<Response [200]>
ok
<Response [200]>
ok
<Response [200]>
ok
<Response [200]>
ok
<Response [200]>
ok
<Response [200]>
ok

然后,数据通过Lambda函数(经过清理和格式化)到达DynamoDB,API网关中没有日志错误。