我在 API Gateway 中设置了一个 REST API,它与 Lambda 集成以将传入请求路由到另一个外部 REST API。它本质上是从我们的 API 到另一个旧版 API 的直通函数。外部 API 允许使用带有 JSON 值的查询参数,我希望我的 API 也接受 JSON 值并传递到旧版 API,但我收到了 400 Bad Request 错误。我正在使用 Postman 进行测试,将其设置为自动编码。我知道这是一个编码问题,但不确定这些设置可能在哪里。我已为此资源启用 Lambda 代理集成。
因此,在邮递员中,如果我发送此请求:
https://test.my.api.com/users?id={"email":"[email protected]"}
它实际上会转换/编码来发送:
https://test.my.api.com/users?id={%22email%22:%[email protected]%22}
这与旧版 API 配合得很好。但我的 API 返回 400。
它适用于我的 API 的唯一方法是使用 EncodeURIComponent 对值进行完全编码:
https://test.my.api.com/users?id=%7B%22email%22%3A%22test.user%40mail.com%22%7D
客户端应该能够简单地切换端点以指向我的 API,而无需更改任何遗留请求/查询,但我很困惑。
AWS API 网关不支持请求 URL 中的
{
字符。
纯文本管道字符 (|) 和大括号字符({ 或 }) 不支持任何请求 URL 查询字符串,并且必须是 URL 编码。