【问题标题】:AWS API Gateway: How to remove/replace query string parameter in HTTP Proxy Passthrough integration?AWS API Gateway:如何在 HTTP 代理直通集成中删除/替换查询字符串参数?
【发布时间】:2021-04-20 22:54:22
【问题描述】:

当我使用下面的设置查询我的Invoke URLhttps://xxx.execute-api.yyy.amazonaws.com/test/q?apiKey=AAA 时,我的后端收到https://api.mysite.com/q?apiKey=AAA&apiKey=111 的调用:一个apiKey=AAA 来自客户端,第二个-apiKey=111 来自Integration Request配置。

问题: 我应该如何/如何配置一个集成,将 apiKey=AAA 从客户端调用中删除或在集成步骤中替换为 111 值,以便只有一个 apiKey 进入后端?

注意

  • 通过代理直通集成,映射模板不可用;
  • 这种配置的原因是我的旧后端有大量无法单独配置的端点。

我的设置

  • 我创建了一个新的 REST API。
  • 然后,我创建了一个名为 proxy 的新配置为代理资源,其资源路径为 /{proxy+},并使用以下 ANY 方法设置作为代理集成:
    • 集成类型HTTP Proxy
    • 端点 URL:https://api.mysite.com/{proxy}
    • 内容处理:Passthrough
  • 下一步,我通过向URL Query String Parameters 部分添加新的查询字符串,为我的/{proxy+} - ANY 配置了Integration Request
    • 姓名:myApiKey
    • 映射自:'111'
  • 然后我点击Deploy APItest 阶段并获得Invoke URL,假设:https://xxx.execute-api.yyy.amazonaws.com/test

【问题讨论】:

    标签: amazon-web-services aws-api-gateway


    【解决方案1】:

    即使使用代理集成,我们仍然可以覆盖请求和响应。 Here 是博客。让我试着总结一下。

    • 确保 Use Proxy Integration 未选中
    • 映射模板中的简单 VTL 模板替换 apiKey queryParameter。
      #set($newApiKey = "abcd")
      $input.json("$")
      #set($context.requestOverride.querystring.apiKey = $newApiKey)
    
    • 添加方法响应示例响应代码 200、400 和 500。
    • 为每个响应代码的每个状态代码添加集成响应,例如带有传递行为的 2xx 2\d{2} 的 http 状态。

    假设我们为路径/someapi/sompath 设置了proxy。以上模板将/someapi/sompath?apiKey=100替换为{proxy}?apiKey=abcd

    【讨论】:

    • 替换工作,但是这种方法带来了很多问题,因为它需要在Method ResponseIntegration Response 中进行大量配置,即使是为了将 CORS 标头返回给客户端,根据doc 对于代理集成中的 ANY 方法,将不会设置任何适用的 CORS 标头。 Content-Type 也一样,它并不总是 json。请告知我应该怎么做才能通过Integration Response 以更少的努力将所有标头从后端传递到客户端。
    • 对于代理集成,我们无法对 Method ResponseIntegration Response 进行任何更改。这个答案的变化是针对Integration Request。并且来自后端的响应被发送到客户端而不做任何更改,我们不需要为它做任何设置,我们不能改变响应头。为了处理 CORS,我们需要添加 OPTIONS 方法,使用 MOCK 集成并在 Integration Response 中返回必要的标头,保持 'ANY' 不变。
    • 如果在删除Integration Request 中的Use Proxy Integration 标志后保持Integration Response 链保持不变,那么我会收到以下错误:Execution failed due to configuration error: No match for output mapping and no default output mapping configured. Endpoint Response Status Code: 200。因此,未选中的 Use Proxy Integration 也会影响响应链。
    • 好的。我测试了它,看起来我们也需要设置响应。 1.设置方法响应 2.设置集成响应。我会更新我的答案。
    • @vaa ,总的来说是的,覆盖Integration Request 似乎确实会影响Integration Response,这很奇怪。
    猜你喜欢
    • 2016-10-27
    • 2021-01-13
    • 2018-02-25
    • 2020-11-25
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多