【问题标题】:AWS API Gateway multiple POST methods for one resourceAWS API Gateway 一种资源的多种 POST 方法
【发布时间】:2018-04-03 23:08:34
【问题描述】:

我正在尝试使用 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 是否支持这一点以及如何实施它?

【问题讨论】:

    标签: aws-lambda aws-api-gateway


    【解决方案1】:

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


    如果遵循该方案并不重要

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

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

    例如:

    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 函数,用于匹配规则的任何路径。

    例如ANY /{proxy+} 将匹配所有请求。

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

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

    【讨论】:

    • 很好的答案,谢谢!我考虑过第一个解决方案,但这似乎不符合 REST 最佳实践,因为它使用动词作为资源。我会试试你介绍的代理资源解决方案。
    • 在第一个解决方案中,“analyzeRequest”是一个名词。这是一个分析请求。您也可以将其视为将任务添加到处理队列中。服务器将开始处理它,然后您可以稍后通过 ID 获取该任务以确定其状态/结果。
    • 另一种选择,如果您通读此答案:stackoverflow.com/a/19650279/242311,另一种选择是将您的文档 [s] 发布到 /documents-being-analyzed 之类的位置。只是另一种概念化它的方式。
    • @NicholasSizer 你能帮我解决这个用例吗stackoverflow.com/questions/62871941/…
    猜你喜欢
    • 2021-05-29
    • 2023-01-30
    • 2019-08-22
    • 2018-11-11
    • 2016-01-27
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多