amazon-web-services - 在 aws lambda 中有没有一种方法可以在调用处理程序之前触发一个钩子
问题描述
我有一个使用具有以下端点的无服务器框架的 rest api,
获取 /clients/{id}
POST /clients/{id}/payments{type}
客户和付款都有自己的处理程序。我想知道是否有一种方法可以通过某种钩子将客户端详细信息注入支付处理程序,而不是调用代码以在支付处理程序中获取客户端。这样,客户端的所有子资源的处理程序将不需要在处理程序中获取客户端详细信息。如果我可以利用无服务器框架的插件来实现同样的效果,那将会很有趣。
解决方案
我能看到实现这一点的唯一方法是使用自定义授权者,它不是为此而设计的,但您可以让它与您的客户一起发送到您的请求上下文以及允许您的 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);
};
这仅在您要缓存授权方响应时才有意义,否则您最好让您的付款处理程序来获取客户端。
推荐阅读
- openlayers - openlayers ol-ext如何在变换中排除特征
- mongodb - MongoDb 使用序列/唯一 ID 更新现有文档?
- scala - 用def定义函数和Scala中的变量之间的区别?
- java - Spring Boot/ Spring Security,登录表单,用户名无关
- python - Pandas:聚合列的值
- c# - C# Windows 窗体(在运行时添加新控件)
- c# - 没有服务引用的 C# WCF
- sql - 带有多个回复的 SQL 回复
- php - PHP搜索字符串是否在MYSQL行中
- python - 如何通过 selenium 访问无头 chrome 中的系统文件索引?