JSONObject [\ "body \"] не найден в AWS ApiGateway - PullRequest
0 голосов
/ 06 июля 2018

Я разрабатываю шлюз API для получения данных (изображения) с датчика и отправки их в DynamoDB на AWS. У меня уже есть конечная точка и ключ 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 (средство проверки недопустимого запроса).

Как вы можете видеть на следующем рисунке, я получаю ошибки 4xx для всех запросов API.

enter image description here

DynamoDB не получает полезную нагрузку. Может ли кто-нибудь дать мне небольшое представление о возможных причинах этого?

1 Ответ

0 голосов
/ 16 июля 2018

Я нашел решение. Было исправлено несколько вещей:

1 - Я правильно отобразил JSON, используя: https://www.liquid -technologies.com / online-json-to-schema-converter

Итак, для:

{
  "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

И данные поступают в DynamoDB через функцию Lambda, очищенные и отформатированные, без ошибок журнала в API Gateway.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...