我正在尝试使用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是否支持这个以及如何实现它?
答案 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函数。