Добавление нескольких полей json в flask_restplus RequestParser

Я хочу expect запрос, где request.json выглядит так:

{
  "app_name": "app",
  "model_name": "model"
}

Я создал следующий парсер:

parser = reqparse.RequestParser()
parser.add_argument('app_name', location='json', required=True)
parser.add_argument('model_name',  location='json', required=True)

И я использую парсер как:

class ModelList(Resource):
    @api.expect(parser)
    def get(self):
    """Get all matching model records"""
    ....

Это отображается в сервисе как:

введите здесь описание изображения

Но когда я пробую это, мой запрос переводится следующим образом:

введите здесь описание изображения

Я ожидаю, что запрос будет выглядеть так:

curl -X GET "http://localhost:5000/model" -H  "accept: application/json" -H  "Content-Type: application/json" -d '{"app_name": "test","model_name": "affinity"}'

и не:

curl -X GET "http://localhost:5000/model" -H  "accept: application/json" -H  "Content-Type: application/json" -d "affinity"

Что я делаю не так?


person nish    schedule 26.11.2019    source источник
comment
Ну, у запроса GET не может быть тела запроса, нет. Отправляется только URL-адрес (и заголовки), поэтому вам нужно поместить данные запроса в URL-адрес (обычно в качестве параметров запроса) или в заголовки (крайне необычно, почти никогда не бывает хорошей идеей). Или используйте POST вместо GET, но это имеет определенные коннотации в REST API. Есть ли причина, по которой эти параметры должны быть в формате JSON?   -  person Martijn Pieters    schedule 04.12.2019
comment
@MartijnPieters, вы можете отправить тело запроса даже с запросом GET, хотя это не является обычной практикой.   -  person MikeL    schedule 22.12.2019
comment
@MikeL: да, технически для любого сообщения запроса разрешено включать тело, включая GET, но ни один совместимый сервер не собирается ничего с ним делать. Также см. HTTP GET с телом запроса   -  person Martijn Pieters    schedule 22.12.2019


Ответы (1)