首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用无服务器框架进行请求验证

使用无服务器框架进行请求验证
EN

Stack Overflow用户
提问于 2018-03-06 14:34:18
回答 5查看 17.4K关注 0票数 20

我在后端使用无服务器框架。如何实现请求验证?(不想在lambda函数中编写验证)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-03-07 03:53:22

要使用serverless实现请求验证,您需要做几件事:在堆栈中包含模型/标头定义,然后告诉API网关使用它们进行请求验证。

您需要安装以下软件包:

然后,您需要将它们包含在serverless.yml中:

代码语言:javascript
运行
复制
plugins:
  - serverless-reqvalidator-plugin
  - serverless-aws-documentation

注意:下面只是关于如何合并软件包的一个简单的简要说明。请访问软件包的文档页以获得更全面的示例..。

  1. 向API网关提供模型/头的描述。 您可以为您的模型导入json,并使用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或false
  2. 告诉API网关实际使用模型进行验证 这个部分使用了serverless-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定义最终会看起来有点像这样:

代码语言:javascript
运行
复制
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
票数 34
EN

Stack Overflow用户

发布于 2019-05-27 20:18:52

这现在得到了Serverless框架的支持,因此不需要使用外部插件。

要启用请求验证,需要向serverless.yml添加以下内容

代码语言:javascript
运行
复制
  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

票数 31
EN

Stack Overflow用户

发布于 2020-04-29 14:22:33

正如Ivan所指出的,不需要外部插件,因为这是Serverless框架所支持的。然而,我认为配置这一点的方式已经改变了。

代码语言:javascript
运行
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49133294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档