AWS API Gateway Serverless проверяет тело запроса и возвращает ответное сообщение об ошибке - PullRequest
1 голос
/ 22 апреля 2019

Я настраиваю AWS API Gateway, используя Без сервера .В идеале ничего не следует настраивать с помощью консоли AWS, только развертывание с использованием Serverless.

Я хочу, чтобы он проверял тела запросов, поступающих к различным лямбда-функциям, которые также настроены в рамках этого проекта.Эту проверку следует выполнить путем сравнения полученного тела со связанным файлом схемы JSON.В случае неправильно отформатированных запросов я хочу, чтобы в ответе указывалось, какие свойства отсутствуют или неправильно введены.

Я нашел serverless-reqvalidator-plugin , чтобы решить проблему проверки посхемы.Элемент проверки описан в Ресурсе, схема связана с элементом проверки в пользовательском разделе с помощью плагина serverless-aws-Documentation , затем, наконец, функция связана с объектом проверки в разделе функций.используя свойство reqValidatorName в событии http.В идеале, где-то здесь, я хотел бы настроить, какое сообщение должно быть возвращено в ответе в случае ошибки.

// serverless.yml

resources:
   Resources:
      BodyValidation:  
         Type: "AWS::ApiGateway::RequestValidator"
         Properties:
           Name: 'BodyValidation'
           RestApiId: 
             Ref: ApiGatewayRestApi
           ValidateRequestBody: true
           ValidateRequestParameters: false
           /// Ideally, some property about how to dynamically return an error message for invalid requests would be here, or bellow

custom:
  documentation:
// --- cut out api info
    models:
      - name: BodyValidationRequest
        contentType: "application/json"
        schema: ${file(./SampleValidationRequest.json)}

functions:
   SampleValidationFunction:
      //--- cut handler info
       events: 
         - http: 
              //--- cut path and method info
              reqValidatorName: BodyValidation
              documentation: // --- cut documentation info


Я сделал это так, как указано этим ответом для аналогичного вопроса.Мне было бы интересно сделать это, не полагаясь на плагин reqvalidator, но в этом примере , приведенном в документации по AWS API Gateway, он не показывает, как это сделать с помощью Serverless.

Похоже, что это было невозможно в прошлом , но кажется, что возможно сейчас .Я не могу найти примеры, использующие строго serverless.yml, хотя.

Я тестирую запросы как в Консоли AWS, так и в Почтальоне.Например, вот схема, с которой я тестирую:

// SampleValidationRequest.json

{
  "type": "object",
  "properties" :{
    "name": {
      "type": "string"
    },
    "id": {
      "type": "number"
    }
  },
  "required": ["name", "id"]
}

Когда отправляется тело, в котором отсутствует параметр, например, id с:

{
    "name": "test"
}

Я получаю обратнов теле ответа

{
  "message": "Invalid request body"
}

Я бы хотел вместо этого сказать что-то вроде того, что вижу при просмотре журналов в AWS

{
  "message": "Request body does not match model schema for content type application/json: [object has missing required properties (["id"])]
}

Итак, подведем итог:

1.Можно ли добавить какое-либо свойство, которое динамически объясняет, что не так с телом запроса в ответном сообщении?

2.Можно ли проверить тело запроса по схеме, просто используя установку из Serverless для API-интерфейса AWS вместо reqvalidator?

...