配置无服务器以处理所需的路径参数
Configuring Serverless to handle required path parameters
我是无服务器新手,正在编写我的第一个服务。它是为 AWS API 网关和 node.js lambda 函数构建的。将此视为我的 serverless.yaml
文件:
service: applicationCatalog
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
functions:
listShirts:
handler: handler.listShirts
events:
- httpApi: GET /
createShirt:
handler: handler.createShirt
events:
- httpApi: POST /
getShirt:
handler: handler.getShirt
events:
- httpApi:
method: GET
path: "/{shirtId}"
request:
parameters:
paths:
shirtId: true
deleteShirt:
handler: handler.deleteShirt
events:
- httpApi:
method: DELETE
path: "/{shirtId}"
request:
parameters:
paths:
shirtId: true
resources: {}
函数 listShirts、createShirt 和 getShirt 都按我的预期工作,并且在传递 ShirtId 时 deleteShirt 也工作。问题是我在删除时没有传递 ShirtId。假设我的服务 url 是“https://shirts.mywardrobeapi.com”。我期待这个请求:
DELETE https://shirts.mywardrobeapi.com
触发 API 网关的错误响应。而是调用 deleteShirt 函数。当然,我可以在函数内部处理这个简单的检查,但我认为这就是 serverless.yaml
文件中的 { "shirtId" : true }
设置的目的。如何让此设置根据需要处理 shirtId
并且在未提供时不调用该函数?如果我不能,这个设置的目的是什么?
我建议使用 Middy and validator middleware 来处理所需的参数。
是的,缺点是你的 lambda 总是被触发。而且你还获得
- 在代码中保持处理所需参数的灵活性
- 如果参数错误,清除日志记录
- 您还可以验证 外发响应
- 让你serverless.yaml更干净
我们更喜欢中间而不是网关的精确配置API。
我是无服务器新手,正在编写我的第一个服务。它是为 AWS API 网关和 node.js lambda 函数构建的。将此视为我的 serverless.yaml
文件:
service: applicationCatalog
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
functions:
listShirts:
handler: handler.listShirts
events:
- httpApi: GET /
createShirt:
handler: handler.createShirt
events:
- httpApi: POST /
getShirt:
handler: handler.getShirt
events:
- httpApi:
method: GET
path: "/{shirtId}"
request:
parameters:
paths:
shirtId: true
deleteShirt:
handler: handler.deleteShirt
events:
- httpApi:
method: DELETE
path: "/{shirtId}"
request:
parameters:
paths:
shirtId: true
resources: {}
函数 listShirts、createShirt 和 getShirt 都按我的预期工作,并且在传递 ShirtId 时 deleteShirt 也工作。问题是我在删除时没有传递 ShirtId。假设我的服务 url 是“https://shirts.mywardrobeapi.com”。我期待这个请求:
DELETE https://shirts.mywardrobeapi.com
触发 API 网关的错误响应。而是调用 deleteShirt 函数。当然,我可以在函数内部处理这个简单的检查,但我认为这就是 serverless.yaml
文件中的 { "shirtId" : true }
设置的目的。如何让此设置根据需要处理 shirtId
并且在未提供时不调用该函数?如果我不能,这个设置的目的是什么?
我建议使用 Middy and validator middleware 来处理所需的参数。 是的,缺点是你的 lambda 总是被触发。而且你还获得
- 在代码中保持处理所需参数的灵活性
- 如果参数错误,清除日志记录
- 您还可以验证 外发响应
- 让你serverless.yaml更干净
我们更喜欢中间而不是网关的精确配置API。