AWS API Gateway возвращает почтальон методу другого статуса - PullRequest
1 голос
/ 11 июня 2019

У меня AWS Lambda интегрирован в API Gateway.Лямбда текущая, только что возвращающая ошибку:

exports.handler = (event, context, callback) => {
  context.fail(JSON.stringify({
    status: 500,
    errors: 'This is definitely the same endpoint.'
  }));
};

Я добавил ответ HTTP status 500 в ответ метода API Gateway и сопоставил ответ интеграции с помощью регулярного выражения * "status": 500. *на ответ 500.

Когда я проверяю это с помощью функции метода тестирования в AWS, я получаю ожидаемый ответ 500:

AWS Method Test Response

Но когда отправляю команду в конечную точку с почтальоном, я получаю 200 статус:

Postman response

Как это может быть?Испытание метода, по-видимому, говорит о том, что мои настройки Integration Response и Method Response правильны, и у меня правильно настроено регулярное выражение, но что мне не хватает между API-шлюзом и остальным миром, который может привести к этому другому результату?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вы пробовали Развертывание API?Возможно, повторное развертывание может решить проблемы.

0 голосов
/ 11 июня 2019

Вы наткнулись на Обрабатывать пользовательские лямбда-ошибки в руководстве API Gateway уже?

Предложенный формат:

{
   "isBase64Encoded" : "boolean",
   "statusCode": "number",
   "headers": { ... },
   "body": "JSON string"
}

Так что вам в основном нужновернуть эту структуру JSON.Я проверяю это с AWS безсерверной экспресс-библиотекой (строка 100-105) - которую мы используем - и она возвращает эту структуру.

Основная проблема заключается в том, что отправка HTTP-ответа клиентуявляется задачей для шлюза API, и для этого необходимо вернуть действительный ответ JSON от лямбды в формате, понятном для шлюза API.Статус выполнения лямбды также будет 200 (потому что он работал A-Okay), но API-шлюз преобразует ваш ответ в 500. Именно поэтому вам нужна эта двойная / тройная кодировка JSON (JSON-as-string в JSON-attributes).

...