AWS API Gateway一种资源的多种POST方法

时间:2018-04-03 23:08:35

标签: aws-lambda aws-api-gateway

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

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方法链接到不同的Lambda函数。我查看了开发人员文档,但没有发现任何解决此类用例的问题。有谁知道AWS是否支持这个以及如何实现它?

1 个答案:

答案 0 :(得分:1)

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

如果遵循该计划并不重要

考虑让您的API方案更加RESTful。

也许不是在analyzeEntities上执行documents操作,而是考虑您分析文档的请求本身就是可以创建的资源......

e.g:

POST /documents/analyzeRequest[s]
(where body describes the type of request)

POST /documents/analyzeEntitiesRequest[s]

这些将允许您稍后添加GET以列出先前/当前请求

如果遵循该计划很重要

因此,在资源路径中指定:会导致错误:

  

资源的路径部分仅允许在开头和结尾使用a-zA-Z0-9 ._-和花括号。

此解决方法是创建新资源并检查Configure as proxy resource框。 创建代理资源允许您将路由决策制定延迟到lambda函数,用于符合规则的任何路径。

e.g。 ANY /{proxy+}会匹配所有请求。

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

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