Шлюз AWS API с Python-EVE, где не работает развернутый API

У меня есть общедоступный API Python-eve, и мы можем запросить его следующим образом:

https://my-api.com/collections?where={"name":" Питер"}

Я хочу создать шлюз API для проксирования той же конечной точки URL следующим образом:

https://my-api-amazon-gateway.com/prod/collections?where={"имя":"питер"}

Что я сделал:

  1. Я создаю новый шлюз API с новым ресурсом «коллекции» и методом «GET» для этого ресурса.
  2. In the collections - GET - Method Execution, in Method Request:
    • in URL Query String Parameters, I add one with name "where"
    • в Заголовки HTTP-запроса я добавляю один с именем "Content-Type"
  3. In the "collections - GET - Method Execution", in "Integration Request"
    • in URL Query String Parameters I have name "where" and Mapped from "method.request.querystring.where"
    • в Заголовки HTTP я добавляю один элемент "Content-Type" с Mapped from "method.request.header.Content-Type"

Если я перейду к Тест метода и поставлю {"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 не работает, когда строка запроса является объектом.

Любая подсказка об этом?

Большое спасибо!


person MTG    schedule 21.04.2016    source источник


Ответы (1)


Вам нужно будет URL-кодировать параметр. Причина, по которой он работает при тестировании с помощью Method Test, заключается в том, что он заботится о кодировании параметров.

Вместо https://my-api-amazon-gateway.com/prod/collections?where={"name":"peter"}

Попробуйте, https://my-api-amazon-gateway.com/prod/collections?where=%7B%22name%22%3A%22peter%22%7D

Надеюсь это поможет

person Chloe Oh    schedule 21.04.2016