Как передать очень длинный массив объектов в строку запроса?

Есть RESTful API с некоторым ресурсом. Мне нужно ПОЛУЧИТЬ какой-то ресурс с параметром, который в представлении JSON выглядит так:

{
  "id": int,
  "params":
  [
    {
      "param1": "string",
      "param2": "string"
    },
    {
      "param1": "string",
      "param2": "string"
    }
  ]
}

У меня есть два возможных способа отправить этот объект в строке запроса:

  • id=1&params[0].param1=test&params[0].param2=test&params[1].param1=test&params[1].param2=test
  • id=10000&params[0][param1]=test&params[0][param2]=test&params[1][param1]=test&params[1][param2]=test

Проблема в том, что массив params может содержать много элементов, а строка запроса может быть очень длинной, более 2000 символов.

Отправлять параметры в теле запроса через GET - плохая идея.

Как я могу отправить такие параметры правильным способом RESTful? Могу ли я использовать другой метод HTTP? Или просто изменить длину запроса на сервере?


person Oleg Kyrylchuk    schedule 03.11.2017    source источник


Ответы (2)


Используйте метод POST, чтобы получить некоторые данные, потому что параметры слишком длинные, и метод GET НЕ ЯВЛЯЕТСЯ плохой идеей.

Вы можете добавить параметры поиска в текст запроса в JSON, например

{
  "id": int,
  "params":
  [
    {
      "param1": "string",
      "param2": "string"
    },
    {
      "param1": "string",
      "param2": "string"
    }
  ]
}
person Vincent Menant    schedule 03.11.2017
comment
Я знаю, что могу отправлять параметры в теле. Но добавлять их в команду GET - плохая идея. https://stackoverflow.com/questions/978061/http-get-with-request-body. POST предназначен для создания ресурсов, поэтому мне интересно, можно ли использовать его для получения информации в RESTful. - person Oleg Kyrylchuk; 03.11.2017
comment
POST - ГЛАВНОЕ (а не СТРОГО) для создания ресурсов. Если вы хотите полностью использовать метод GET, заголовки могут быть решением, но не более подходящим, чем решение POST. - person Vincent Menant; 03.11.2017
comment
Не могли бы вы прислать ссылку, подтверждающую ваше заявление? Я прочитал обсуждение SO , спецификация HTTP и статья W3. Вы знаете, технически я, наверное, использую POST. Я только хочу найти подтверждение, что это нормально, но не могу найти такую ​​информацию. Поэтому я и спросил об этом здесь :) - person Oleg Kyrylchuk; 03.11.2017

Если вам нужен идемпотентный URI запроса (т.е. ответ всегда один и тот же), используйте GET, иначе POST.

Для получения более подробной информации вы можете найти здесь ответ s: - Почему я должен отправлять данные POST, а не GET?

person NeeruKSingh    schedule 03.11.2017