【问题标题】:Serverless Framework Lamba Integration - Request Schema Validation无服务器框架 Lamba 集成 - 请求模式验证
【发布时间】:2020-10-09 05:28:32
【问题描述】:

我已经查看了我可以在 SO 上找到的几个答案,但我仍然没有任何运气。我正在使用无服务器并尝试使用 api gateway lambda 集成对 lambda 函数的请求正文进行验证。在运行sls offline 并使用postman 发出POST 请求后,无论body 是什么,请求都会成功。似乎根本没有进行验证。

这就是我所拥有的......

serverless.yml:

service: onboard

# plugins
plugins:
  - serverless-offline

provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-east-1

functions:
  onboard:
    handler: api/onboard.onboard
    events:
      - http:
          path: onboard
          method: post
          integration: lambda
          request:
            passThrough: NEVER
            schema:
              application/json: ${file(models/onboard.schema.json)}
            template:
              application/json: '{ "body" : "$input.body" }'

api/onboard.js

const onboard = async (event) => {
  const response = {
    message: event
  };

  return response;
};

exports.onboard = onboard;

模型/onboard.schema.json:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://path.to/onboard",
  "title": "title",
  "description": "description",
  "type": "object",
  "properties": {
    "environment": { "type": "string" },
    "git": { 
      "type": "object",
      "properties": {
        "repo": {
          "type": "string",
          "format": "uri",
          "pattern": ".git$"
        },
        "token": { "type": "string" }
      },
      "required": ["repo", "token"],
      "maxProperties": 2
    },
    "name": {  "type": "string" },
    "team": {
      "type": "string",
      "pattern": "(?i)(^red$|^blue$|^green$|^yellow$|^black$|^white$)"
    }
  },
  "additionalProperties": false,
  "required": ["name", "team"]
}

【问题讨论】:

    标签: aws-lambda aws-api-gateway jsonschema serverless-framework


    【解决方案1】:

    Serverless-offline 不支持请求验证 https://github.com/dherault/serverless-offline/issues/369

    最好通过定义模拟响应在 apigateway 上单独对其进行测试。这将确保 lambda 响应(如果基于集成类型不正确)不会导致任何误导。

    【讨论】:

      【解决方案2】:

      这里有几点需要注意:

      1. 您的测试请求必须通过与您配置的内容类型相匹配的内容类型,否则验证将被忽略。据我所知,强制使用 Content-Type 的唯一方法是向您的 Lambda 函数添​​加最小验证。
      2. serverless-offline 可能不考虑请求验证。最好在云端进行测试。就我个人而言,我避免在本地进行这些类型的测试,并尽可能多地在云中进行测试。随着无服务器框架发布了名为 Studio 的新功能,它通过提供快速周转时间来进行更改、在几秒钟内推送到云,并为您提供类似邮递员的界面来将测试发送到您的基础设施,从而使这变得更加容易。云使测试变得更加容易。

      【讨论】:

        猜你喜欢
        • 2018-08-14
        • 2021-04-01
        • 2020-03-13
        • 2021-11-25
        • 2015-10-24
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多