使用Python-EVE的AWS API网关"其中"无法在已部署的API

时间:2016-04-21 12:46:31

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

我有一个Python-eve公共API,我们可以通过以下方式查询:

  

https://my-api.com/collections?where= {"名称":"彼得"}

我想创建一个API网关来代理相同的URL端点,方式如下:

https://my-api-amazon-gateway.com/prod/collections?where= {"名称":"彼得"}

我做了什么:

  1. 我创建了一个新的API网关,其中包含一个新资源" collections"和一个" GET"该资源的方法。
  2. 在方法请求中的集合 - GET - 方法执行中:
    • 网址查询字符串参数中,我添加一个名称为"其中"
    • HTTP请求标头中,我添加一个名称为" Content-Type"
  3. 在"集合中 - GET - 方法执行",在"集成请求"
    • in URL查询字符串参数我有名字"其中"并从" method.request.querystring.where"
    • 映射
    • HTTP标头中,我添加了一个项目" Content-Type"使用映射来自" method.request.header.Content-Type"
  4. 如果我转到方法测试,我将{"name":"peter"}作为放在查询字符串中,将application/json作为标题内容 - 类型,一切都很好。

    如果我部署API并在部署的API中尝试相同的端点,则它无效:

      

    https://my-api-amazon-gateway.com/prod/collections?where= {"名称":"彼得"}

    它返回错误 400 Bad Request 。 CloudWatch中没有记录任何内容。

    如果我试图点击

      

    https://my-api-amazon-gateway.com/prod/collections?where=test

    然后一切正常,我得到 HTTP 200 OK ,Python-eve错误The browser (or proxy) sent a request that this server could not understand. 这与我尝试点击

    的结果相同
      

    https://my-api.com/collections?where=test

    因此,由于我不知道的原因,测试工作,但部署的API网关在查询字符串是对象时不起作用。

    关于此的任何线索?

    非常感谢!

1 个答案:

答案 0 :(得分:2)

You will need to URL encode the parameter. The reason it works when testing via Method Test is because it takes care of encoding the parameters.

Instead of, https://my-api-amazon-gateway.com/prod/collections?where={"name":"peter"}

Try it with, https://my-api-amazon-gateway.com/prod/collections?where=%7B%22name%22%3A%22peter%22%7D

Hope this helps