如何在进程触发 lambda 函数之前验证或过滤无服务器和 AWS API 网关中 http 端点路径中的通配符?
How to validate or filter a wildcard in path for http endpoints in Serverless and AWS API gateway before the process triggs the lambda function?
我在无服务器 AWS API 网关 API 中有以下 http 路径 devices/{sn}
。通配符 sn
是一个 15 位数字 [A-Z0-9] 模式。
在 API 今天,任何未被识别为有效路径的字符串都将重定向到此端点。例如:devices/test
转到 devices/{sn}
,devices/bla
转到 devices/{sn}
等等。所有这些字符串将查询数据库并且 return 为空,因为 table 中没有这样的 sn
。我可以在 lambda 内部创建一个验证过程以避免不必要的数据库查询。但我想保存 lambda 资源,我想在调用 lambda 之前进行验证。
这是我今天为这个端点所拥有的:
- http:
path: devices/{sn}
method: GET
private: false
cors: true
authorizer: ${file(env.yml):${self:provider.stage}.authorizer}
request:
parameters:
paths:
sn: true
如何在 Serverless.yml
中设置此验证或过滤器?
事实上它应该是AWS/Serverless的一个非常直接的功能。
假设我们有以下场景:myPath/{id}
。在这种情况下,id 是一个整数(table 中的 pk)。如果我输入 myPath/blabla
它将触发 lambda。系统会消耗资源。它应该有一种先前的验证 - 仅当 {id} === integer
.
时触发端点
您的问题与this issue非常相似
根据 post 和我的经验,不,我认为您不能在 api 网关级别执行验证。
我在无服务器 AWS API 网关 API 中有以下 http 路径 devices/{sn}
。通配符 sn
是一个 15 位数字 [A-Z0-9] 模式。
在 API 今天,任何未被识别为有效路径的字符串都将重定向到此端点。例如:devices/test
转到 devices/{sn}
,devices/bla
转到 devices/{sn}
等等。所有这些字符串将查询数据库并且 return 为空,因为 table 中没有这样的 sn
。我可以在 lambda 内部创建一个验证过程以避免不必要的数据库查询。但我想保存 lambda 资源,我想在调用 lambda 之前进行验证。
这是我今天为这个端点所拥有的:
- http:
path: devices/{sn}
method: GET
private: false
cors: true
authorizer: ${file(env.yml):${self:provider.stage}.authorizer}
request:
parameters:
paths:
sn: true
如何在 Serverless.yml
中设置此验证或过滤器?
事实上它应该是AWS/Serverless的一个非常直接的功能。
假设我们有以下场景:myPath/{id}
。在这种情况下,id 是一个整数(table 中的 pk)。如果我输入 myPath/blabla
它将触发 lambda。系统会消耗资源。它应该有一种先前的验证 - 仅当 {id} === integer
.
您的问题与this issue非常相似 根据 post 和我的经验,不,我认为您不能在 api 网关级别执行验证。