Aws lambda AWS API网关一个资源的多个POST方法

Aws lambda AWS API网关一个资源的多个POST方法,aws-lambda,aws-api-gateway,Aws Lambda,Aws Api Gateway,我正在尝试使用AWS API Gateway和AWS Lambda构建一个API,该API有一个资源,但可以通过POST对该资源执行多个操作,类似于Google构建其API的方式,例如: 我想将每个POST方法链接到不同的Lambda函数。我查阅了开发人员文档,但没有找到任何解决这种类型用例的方法。有人知道AWS是否支持这一点,以及如何实施它吗?这取决于您遵循问题中描述的方案的重要性。关键问题是API网关不允许您在资源名称中使用冒号: 如果遵循该计划并不重要 考虑使您的API方案更加RESTf

我正在尝试使用AWS API Gateway和AWS Lambda构建一个API,该API有一个资源,但可以通过POST对该资源执行多个操作,类似于Google构建其API的方式,例如:


我想将每个POST方法链接到不同的Lambda函数。我查阅了开发人员文档,但没有找到任何解决这种类型用例的方法。有人知道AWS是否支持这一点,以及如何实施它吗?

这取决于您遵循问题中描述的方案的重要性。关键问题是API网关不允许您在资源名称中使用冒号


如果遵循该计划并不重要 考虑使您的API方案更加RESTful

也许不是执行<代码>分析实体在<代码>文档< /代码>上的动作,考虑到您分析文档的请求本身就是可以创建的资源…

e、 g:

这将允许您在以后添加get,以列出以前/当前的请求


如果遵循该计划很重要 因此,在资源路径中指定
会导致错误:

资源的路径部分仅允许在开始和结束处使用a-zA-Z0-9.\和大括号

解决方法是创建一个新资源,并选中
配置为代理资源
框。 创建代理资源允许您将路由决策推迟到lambda函数,以确定与规则匹配的任何路径

e、 g.
ANY/{proxy+}
将匹配所有请求

注意:如果您随后添加了一个单独的资源
GET/foo
,您的代理资源将不会处理
GET/foo
,因为现在存在一个更具体的规则


因此,设置代理资源后,您需要编写一个lambda,根据您的路由规则调用相应的lambda函数。

回答得很好,谢谢!我考虑过第一个解决方案,但它似乎不符合REST最佳实践,因为它使用动词作为资源。我将尝试您概述的代理资源解决方案。在第一个解决方案中,“AnalyzerRequest”是一个名词。这是一个分析的要求。您还可以将其视为向处理队列添加任务。服务器将着手处理该任务,然后您可以稍后按ID获取该任务,以确定其状态/结果。另一个选项,如果您通读了此答案:,另一个选项是将您的文档发布到类似于/正在分析的文档的位置。这只是概念化的另一种方式。@NicholasSizer您能帮我理解这个用例吗
POST https://language.googleapis.com/v1/documents:analyzeEntities
POST https://language.googleapis.com/v1/documents:analyzeEntitySentiment
POST https://language.googleapis.com/v1/documents:analyzeSentiment
...
POST /documents/analyzeRequest[s]
(where body describes the type of request)
POST /documents/analyzeEntitiesRequest[s]