Есть ли способ в AWS лямбда, где я могу вызвать ловушку, прежде чем вызывается обработчик - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть API для отдыха, использующий безсерверный фреймворк со следующими конечными точками:

GET / clients / {id}

POST / clients / {id} / payment {type}

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

1 Ответ

0 голосов
/ 26 апреля 2018

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

пример ответа авторизатора

{
  "principalId": "192389128578129703612946127317023",
  "policyDocument": {
     "Version": "2012-10-17",
     "Statement": [
        {
            "Action": "execute-api:Invoke",
            "Effect": "Allow",
            "Resource": "arn:aws:execute-api:us-east-1:1234567890:apiId/stage/*/*"
        }
    ]
  },
  "context": {
    "client": <your client object>
  }
}

Затем вы можете получить свой клиент

module.exports.handler = (event, context, callback) => {
 const client = event.requestContext.authorizer.client;
....
 callback(null, paymentResponse);
};

Thisимеет смысл только в том случае, если вы собираетесь кэшировать ответ авторизатора, в противном случае вам лучше использовать обработчик платежей для получения клиента.

...