我在后端使用无服务器框架。如何实现请求验证?(不想在lambda函数中编写验证)。
发布于 2018-03-07 03:53:22
要使用serverless
实现请求验证,您需要做几件事:在堆栈中包含模型/标头定义,然后告诉API网关使用它们进行请求验证。
您需要安装以下软件包:
然后,您需要将它们包含在serverless.yml
中:
plugins:
- serverless-reqvalidator-plugin
- serverless-aws-documentation
注意:下面只是关于如何合并软件包的一个简单的简要说明。请访问软件包的文档页以获得更全面的示例..。
serverless-aws-documentation
插件声明http头。下面是如何将模型添加到serverless.yml
中:
定制:文档: api: info: version: v0.0.0标题描述:一些API描述模型:- name: SomeLambdaRequest contentType: application/json:${ file (model/SomeLambdaRequest.json)}#引用您的模型的json模式文件。您还可以内联地声明模型。
下面是如何在lambda定义中引用模型:
函数: someLambda: handler: src/omelambda.Handler事件:- http:#.狙击..。文档:摘要:一些摘要描述:一些描述requestBody:描述:一些描述requestModels: application/json: SomeLambdaRequest
您还可以根据lambda定义声明请求头,如下所示:
函数: someLambda: handler: src/omelambda.Handler事件:- http:#.狙击..。文档:摘要:一些摘要描述:一些描述requestHeaders:-名称:requestHeaders描述:所需的一些头值: true # true或false - name: X-另一个标头描述:所需的报头值: false # true或falseserverless-reqvalidator-plugin
包,您需要将AWS::ApiGateway::RequestValidator
资源添加到serverless.yml
文件中。您可以指定是否要验证请求主体、请求头或两者。
资源: onlyBody: Type: AWS::ApiGateway::RequestValidator属性: Name:‘onlyBody’RestApiId: Ref: ApiGatewayRestApi ValidateRequestBody: true # true或false ValidateRequestParameters: false # true或false
然后,在单个函数上,您可以使用验证器,如下所示:
函数: someLambda: handler: src/omelambda.Handler事件:- http:#.狙击..。reqValidatorName: onlyBody #引用并使用“唯一主体”请求验证器把所有这些放在一起,您的lambda定义最终会看起来有点像这样:
functions:
someLambda:
handler: src/someLambda.handler
events:
- http:
# ... snip ...
reqValidatorName: onlyBody # reference and use the 'only-body' request validator
documentation:
summary: some summary
description: some description
requestBody:
description: some description
requestModels:
application/json: SomeLambdaRequest
requestHeaders:
- name: x-some-header
description: some header value
required: true # true or false
- name: x-another-header
description: some header value
required: false # true or false
发布于 2019-05-27 20:18:52
这现在得到了Serverless框架的支持,因此不需要使用外部插件。
要启用请求验证,需要向serverless.yml
添加以下内容
HttpHandler:
handler: src/lambda/http/create.handler
events:
- http:
method: post
path: items
request:
schemas:
application/json: ${file(models/create-todo-model.json)}
与其将文件位置直接保存在application/json
下,还可以在serverless.yml
文件的apiGateway
部分下定义模型的名称。链接到文档
恳请注意,从2022年2月起,无服务器离线插件并不能验证本地的http.request.schemas
。虽然他们支持不推荐的版本http.request.schema
。
发布于 2020-04-29 14:22:33
正如Ivan所指出的,不需要外部插件,因为这是Serverless框架所支持的。然而,我认为配置这一点的方式已经改变了。
functions:
create:
handler: posts.create
events:
- http:
path: posts/create
method: post
request:
schema:
application/json: ${file(create_request.json)}
本例摘自:https://www.serverless.com/framework/docs/providers/aws/events/apigateway/#request-schema-validators
https://stackoverflow.com/questions/49133294
复制相似问题