在aws lambda中有没有办法可以在调用handler之前触发一个钩子

时间:2018-04-26 07:49:21

标签: amazon-web-services aws-lambda serverless-framework serverless

我使用带有以下端点的无服务器框架的休息api

GET / clients / {id}

POST / clients / {id} / payments {type}

客户和付款都拥有自己的处理程序。我想知道是否有一种方法可以通过某种钩子将客户端详细信息注入支付处理程序,而不是调用代码来在支付处理程序中获取客户端。这样,客户端的所有子资源的处理程序将不需要在处理程序中获取客户端详细信息。如果我可以利用无服务器框架的插件来实现同样的目标,那将会很有趣。

1 个答案:

答案 0 :(得分:0)

我能看到实现这一目标的唯一方法是使用custom authorizer,但这不是设计的,但您可以将其发送到您的客户的请求上下文以及允许您的api的政策。然后,您可以缓存授权者响应,这意味着它将缓存您的客户端。

授权人回复的例子

{
  "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);
};

这只有在你要缓存授权者响应时才有意义,否则你最好让你的支付处理程序取代客户端。