首页 > 解决方案 > 在 aws lambda 中有没有一种方法可以在调用处理程序之前触发一个钩子

问题描述

我有一个使用具有以下端点的无服务器框架的 rest api,

获取 /clients/{id}

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

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

标签: amazon-web-servicesaws-lambdaserverless-frameworkserverless

解决方案


我能看到实现这一点的唯一方法是使用自定义授权者,它不是为此而设计的,但您可以让它与您的客户一起发送到您的请求上下文以及允许您的 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);
};

这仅在您要缓存授权方响应时才有意义,否则您最好让您的付款处理程序来获取客户端。


推荐阅读