API Gateway Lambda 端点代理与非代理集成

Posted

技术标签:

【中文标题】API Gateway Lambda 端点代理与非代理集成【英文标题】:API Gateway Lambda endpoint proxy vs non-proxy integration 【发布时间】:2021-09-11 06:53:24 【问题描述】:

我已经构建了 100 多个 API 和 Lambda,从来没有经历过这样的讨论。

我一直使用代理集成,并使用这个来解析我的代码中的参数

x = event['queryStringParameters']
ID   = x.get("param1")
name = x.get("param2")

但是,前端工程师认为我们应该遵循推荐的命名约定,并将参数作为路径参数传递给我们的 API,与此链接 https://restfulapi.net/resource-naming/ 中的路径参数相同 经过一番研究,我发现这基本上是非代理集成,我应该在 API GW 中配置参数。我在许多博客中读到这不是推荐的方式。但我找不到明确偏爱代理集成的明确 AWS 文档。

代理(路径参数):http://api.example.com/device-management/managed-devices/id

非代理(查询字符串参数):http://api.example.com/device-management/managed-devices?param1=id

我一直试图说服他,我没有看到它在任何地方使用过,并且 API URL 用于应用程序代码中,那么为什么 API url 的外观很重要?!!

请,我需要你的意见。告诉我你的想法?

【问题讨论】:

您指的代理集成到底是什么?我能找到的大部分讨论都是围绕与 Lambda 的“API 网关代理集成”。但是,您似乎指的是 proxy+ 路径映射? @qkhanhpro 是的,我的意思是 API 网关代理集成。因为这是我可以配置参数作为路径参数发送的方式 【参考方案1】:

Lambda 代理集成将请求直接从客户端发送到 lambda 函数,无需任何修改。它直接将一个 URL 映射到一个 lambda 函数。 因此无法在此设置中使用路径参数。更新:可以在this AWS documentation 中描述的URL 中使用path 段的路径参数

Lambda 集成可以在将请求发送到 Lambda 函数之前对其进行修改,也可以在将同一函数的响应发送到客户端之前对其进行修改。借助 Lambda 集成,API 设计人员可以更好地控制 API,而不是将 API 定义埋入代码中。从 API Gateway Velocity Template Language (VTL) 生成 Swagger API 规范很容易。

建议将 Lambda 代理集成用于快速原型设计,但建议将 Lambda 集成用于成熟的 REST API。

【讨论】:

感谢您的好评。这是您的个人意见还是 AWS 的建议?如果是这样,你能把文档链接分享给我吗? 嗨@Data_sniffer,抱歉。我指的是旧的 Lamda 代理集成。现在您可以将路径参数与代理集成一起使用。无需仅针对路径参数进行非代理集成。

以上是关于API Gateway Lambda 端点代理与非代理集成的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?

使用代理通过 AWS API Gateway 的 Lambda 错误

AWS Lambda,API Gateway 返回 Malformed Lambda 代理响应,502 错误

未调用 AWS API Gateway 自定义授权方

使用 AWS Lambda 和 API Gateway NodeJs 的格式错误的 Lambda 代理响应

使用代理集成通过 API Gateway 触发 AWS Lambda