2016-09-21 5 views
3

Я создал образец лямбда-функции для получения успеха & ответы об ошибках. функция, как показано нижеLambda return only 200 Код ответа

exports.handler = (event, context, callback) => { 
if(event.val1=="1") 
{ 
callback(null, 'success'); 
}else 
{ 
callback(true, 'fail'); 
} 
}; 

Когда я протестировал эту функцию с помощью API шлюза, я получил другое тело ответа, но код ответа такой же (всегда возвращает 200 OK кода ответа).

Можно ли настроить код состояния из лямбда-функции (например: требуется 500 для ответов об ошибках & 200 для ответов об успешности)?

+1

http://stackoverflow.com/a/31371862/1428388 Полезно? – jbird

ответ

1

Возможно, вам захочется взглянуть на новую упрощенную функцию API Gateway Lambda proxy.

С помощью этого кода вы можете определить свои коды состояния, вернуть заголовки и содержимое тела непосредственно с вашей Лямбда.

Пример из документации:

'use strict'; 
console.log('Loading hello world function'); 

exports.handler = function(event, context) { 
    var name = "World"; 
    var responseCode = 200; 
    console.log("request: " + JSON.stringify(event)); 
    if (event.queryStringParameters !== null && event.queryStringParameters !== undefined) { 
     if (event.queryStringParameters.name !== undefined && event.queryStringParameters.name !== null && event.queryStringParameters.name !== "") { 
      console.log("Received name: " + event.queryStringParameters.name); 
      name = event.queryStringParameters.name; 
     } 

     if (event.queryStringParameters.httpStatus !== undefined && event.queryStringParameters.httpStatus !== null && event.queryStringParameters.httpStatus !== "") { 
      console.log("Received http status: " + event.queryStringParameters.httpStatus); 
      responseCode = event.queryStringParameters.httpStatus; 
     } 
    } 

    var responseBody = { 
     message: "Hello " + name + "!", 
     input: event 
    }; 
    var response = { 
     statusCode: responseCode, 
     headers: { 
      "x-custom-header" : "my custom header value" 
     }, 
     body: JSON.stringify(responseBody) 
    }; 
    console.log("response: " + JSON.stringify(response)) 
    context.succeed(response); 
}; 
0

Для того, чтобы отправить пользовательский код ошибки AWS API GW вы должны использовать шаблон отображения ответа в ответ интеграции. В основном вы определяете регулярное выражение для каждого кода состояния, который вы хотите вернуть из API GW.

Шаги:

  • Определить метод ответа для каждого кода состояния AWS Documentation
  • Определение интеграции ответа RegEx для каждого отображения состояния на правильный метод реагирования AWS Documentation

Использование этой конфигурации HTTP код возврата возвращенный API GW клиенту, соответствует правильному выражению в «selectionPattern».

Наконец, я настоятельно рекомендую использовать интерфейс API GW для обработки этих конфигураций, Serverless - очень хорошая структура.

Использование Servereless вы можете определить шаблон следующим образом (бессерверной 0,5 сниппет):

myResponseTemplate: 
application/json;charset=UTF-8: | 
#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage'))) { 
    "status" : $errorMessageObj.status, 
    "error":{ 
     "error_message":"$errorMessageObj.error.message", 
     "details":"$errorMessageObj.error.custom_message" 
    } 
} 
responsesValues: 
'202': 
    selectionPattern: '.*"status": 202.*' 
    statusCode: '202' 
    responseParameters: {} 
    responseModels: {} 
    responseTemplates: '$${myResponseTemplate}' 
'400': 
    selectionPattern: '.*"status": 400.*' 
    statusCode: '400' 
    responseParameters: {} 
    responseModels: {} 
    responseTemplates: '$${myResponseTemplate}' 

Тогда просто возвращает объект JSON из вашего лямбда, как в следующем питона сниппета (вы можете использовать аналогичный подход в nodejs):

def handler(event, context): 
    # Your function code ... 
    response = { 
     'status':400, 
     'error':{ 
      'error_message' : 'your message', 
      'details' : 'your details' 
      } 
    } 
    return response 

Я надеюсь, что это помогает.

G.

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