Развернутый микросервис Krakend Django не получает входные данные, указанные в теле json
У меня есть приложение Django, развернутое с помощью шлюза Krakend. Все конечные точки активны. Но служба не может получить доступ к данным запроса.
Я даю запрос следующим образом
curl --location 'https://backend-dev-url.com/api' \
--header 'Content-Type: application/json' \
--data '{
"a":"value",
"b":"value"
}'
Вот ответ, который я получаю
{
"a": [
"This field is required."
],
"b": [
"This field is required."
]
}
Я правильно передаю все недостающие переменные. Но почему-то не доходит до сервиса. На localhost все работает отлично. Проблема только с развернутым экземпляром.
Ниже приведена часть конфигурации krakend для этого микросервиса
{
"endpoint": "api/v1",
"method": "POST",
"output_encoding": "no-op",
"backend": [
{
"url_pattern": "api/v1",
"encoding": "no-op",
"sd": "static",
"method": "POST",
"host": ["http://localhost:8000"],
"disable_host_sanitize": false
}
],
"input_headers": ["Authorization","Content-Type"],
"extra_config": {
"qos/ratelimit/router": {
"max_rate": 100,
"client_max_rate": 60,
"every": "1m",
"strategy": "ip"
}
}
}
Спасибо.
Шлюз не манипулирует и не фильтрует полезную нагрузку, если только вы не добавите компонент, который это делает, поэтому если вы отправляете --data
, он достигает сервиса в том виде, в котором он есть. Проблема кроется где-то в другом месте.
Я вижу некоторые несоответствия в переданной вами конфигурации.
- В
curl
вызывается конечная точка/api
, но в вашей конфигурации объявлена/api/v1
. Таким образом, либо вы вставили сюда неправильную конфигурацию, либо запрос не дойдет до того места, которое вы ожидаете .
- В производстве странно, что приложение Django находится на той же машине, что и KrakenD. Я вижу, что бэкенд указывает на
localhost:8000
. Если вы используете разные машины или Docker-контейнеры, вы должны обновить этот хост на правильный.