Бессерверная интеграция лямбда-прокси с использованием модели проверки запросов - как получить подробный ответ об ошибке проверки

Я проверяю полезную нагрузку запроса с помощью модели - см. Фрагмент serverless.yml ниже:

functions:
  authorizer:
    handler: src/authorization/authorizer.general
  activity:
    handler: src/resources/activity.submit
    events:
    - http:
        path: /tenant/{tenant}/activities
        method: POST
        cors: true
        authorizer: ${self:custom.authorizer.general}
        request:
          schema:
            application/json: ${file(models/activity.json)

Все работает, как ожидалось, но ответ проверки для полезной нагрузки, которая не соответствует схеме:

{
    "message": "Invalid request body"
}

Я попытался добавить шаблон ответа, но получил предупреждение о том, что «ответ» будет удален (это интеграция с лямбда-прокси, а не с лямбда-интеграцией).

Как заставить API-шлюз выдавать подробный ответ на сообщение об ошибке проверки в этом сценарии (например, при интеграции Lambda Proxy)?

Любая помощь будет очень признательна, так как я не могу найти ничего подходящего в Интернете.


person Rob Bennett    schedule 20.08.2019    source источник


Ответы (1)


Я нашел решение этой проблемы, добавив ответ шлюза, чтобы переопределить ответ неверного тела запроса по умолчанию. К сожалению, в Serverless 1.50.0 это напрямую не поддерживается (см. проблему с github

Но смог добавить ответ шлюза через бессерверный ресурс, то есть облачную информацию (см. Ссылку выше):

resources:
  Resources:
    ApiGatewayRestApi:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: ${self:provider.stage}-${self:service}
    GatewayResponseResourceNotFound:
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        RestApiId:
          Ref: 'ApiGatewayRestApi'
        ResponseType: BAD_REQUEST_BODY
        "StatusCode" : "422"
        ResponseTemplates:
          application/json: "{\"message\": \"$context.error.message\", \"error\": \"$context.error.validationErrorString\"}"

Примечание: мне не удалось найти способ указать, какое свойство не прошло проверку, но, по крайней мере, сообщение проверки немного более подробное.

person Rob Bennett    schedule 21.08.2019