Создать ответ для недействительных и неполных конечных точек, используя Serverless Framework?
У меня есть ряд конечных точек HTTP, которые включают лямбда-функции, которые обращаются к подробной информации, например:
products/1
users/1
package/998134
Не существует соответствующей конечной точки для products/
, users/
или же package/
, У меня есть собственный авторизатор по всему users/{id}
а также package/{id}
конечные точки.
Если пользователь идет в users/
или же packages/
с помощью GET
они получают {"message":"Missing Authentication Token"}
, Если они попадают в эти конечные точки с POST
(допустимая опция для моей конечной точки, если они также должны были передать идентификатор), они получают
{'message': "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=MYTOKENHERE"}
Есть ли способ настроить любое из этих сообщений? Моей первой мыслью было просто создать связанные конечные точки:
GET users/
POST users/
GET products/
POST products/
GET package/
POST package
Но это быстро становится большой работой, потому что у меня есть более трех из этих конечных точек. Мне тоже нужно включить DELETE
а также PUT
на некоторых из них.
Могу ли я легко создать ответ для недействительных или неполных конечных точек?
Мой serverless.yml в настоящее время имеет следующие определения:
show_user:
handler: users/show_users.return_user
events:
- http:
path: users/{id}
method: get
cors: true
update_user:
handler: users/update_user.update_user
events:
- http:
path: users/{id}
method: post
cors: true
authorizer: ${self:custom.authorizer.users}
2 ответа
Мне нужно было сделать что-то подобное в последнее время. Я сделал это с такой конфигурацией:
error_messages:
handler: custom_errors/errors.invalid_path
events:
- http
path: users/
method: any
- http
path: product/
method: any
- http
path: package/
method: any
Затем создайте обработчик в указанном месте и верните желаемый результат. В этом случае обработчик будет custom_errors/errors.invalid_path
В моем случае я вернул HTTP 404 с пользовательским сообщением о том, что {id}
требовалось
method: any
line будет перехватывать все HTTP-глаголы, поэтому вам нужно будет добавить только три строки для каждой конечной точки, на которой вы хотите эту защиту, вместо группы для каждого отдельного HTTP-глагола.
Я сделал это с помощью функции {proxy+} catchall в ApiGateway следующим образом:
no-endpoint:
description: catch all non-existent enpoints with 404 - must be
last http
handler: src/functions/api-controller.noEndpoint
events:
- http:
path: /{proxy+}
method: any
cors: true
Примечание: это ДОЛЖНА быть последняя конечная точка http в вашем файле без сервера, чтобы другие действительные конечные точки не были перехвачены. Вы можете прочитать больше об этом здесь:
https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/