Я настраиваю 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?