AWS API 网关 AWS 代理事件中的“路径”与“资源”(或“resourcePath”)有何区别?

5
我正在学习AWS Lambda。我创建了一个Lambda,将充当REST API(在CloudFormation术语中为APIEvent),并希望使用事件在本地调试该Lambda。
如果我理解正确,运行“sam local generate-event apigateway aws-proxy”会生成适用于本地运行/调试我的Lambda的事件。这将产生以下事件(某些嵌套值已缩写):
{
  "body": "eyJ0ZXN0IjoiYm9keSJ9",
  "resource": "/{proxy+}",
  "path": "/path/to/resource",
  "httpMethod": "POST",
  "isBase64Encoded": true,
  "queryStringParameters": {
    "foo": "bar"
  },
  "multiValueQueryStringParameters": {
    "foo": [
      "bar"
    ]
  },
  "pathParameters": {
    "proxy": "/path/to/resource"
  },
  "stageVariables": {
    "baz": "qux"
  },
  "headers": {
    ...
  },
  "multiValueHeaders": {
    ...
  },
  "requestContext": {
    "accountId": "123456789012",
    "resourceId": "123456",
    "stage": "prod",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef",
    "requestTime": "09/Apr/2015:12:34:56 +0000",
    "requestTimeEpoch": 1428582896000,
    "identity": {
      ...
    },
    "path": "/prod/path/to/resource",
    "resourcePath": "/{proxy+}",
    "httpMethod": "POST",
    "apiId": "1234567890",
    "protocol": "HTTP/1.1"
  }
}

然而,我不理解 resource(被复制到 requestContext.resourcePath 中)与 path(被复制到 requestContext.path 中)之间的关系。我应该为这些值填什么?

1个回答

1
resource是您在API网关中定义的API资源。例如,在您的情况下是/{proxy+}path是请求的实际路径。
因此,当您发出请求GET https://yourdomain.com/v1/pets时:
- 路径为/v1/pets - 资源为/{proxy+}

1
两个后续问题:1)那么,与“path”相比,“requestContext.path”中是否存在额外的“/prod”是模板中的错误吗? 2)我不理解“{proxy+}”的含义。它只是一个简单的占位符吗?在您的示例中,它仍然保持为“{proxy+}”,而不是主机名(“yourdomain.com”)?在哪种情况下资源不等于“{proxy+}”?提前致谢! - DieterDP
我可能错了,但我认为requestContext.path也包括阶段名称。 资源是代理占位符。您可以从路径参数中获取与占位符匹配的实际值。免责声明:我的答案基于我目前所见,文档缺乏解释,请谨慎对待并联系AWS支持以获取正确答案。 - wildnux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接