我有一个Python-eve公共API,我们可以通过以下方式查询:
https://my-api.com/collections?where= {"名称":"彼得"}
我想创建一个API网关来代理相同的URL端点,方式如下:
https://my-api-amazon-gateway.com/prod/collections?where= {"名称":"彼得"}
我做了什么:
如果我转到方法测试,我将{"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.
这与我尝试点击
因此,由于我不知道的原因,测试工作,但部署的API网关在查询字符串是对象时不起作用。
关于此的任何线索?
非常感谢!
答案 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