Подтвердить что ты не робот

Для Restful API, может ли метод GET использовать данные json?

Я не хочу видеть такую ​​длинную строку параметров в URI. Итак, может ли метод GET использовать данные json?

В моей ситуации мне нужно отфильтровать результат, данный тип параметров. Если имеется много параметров, длина может превышать предел URI. Итак, есть ли лучшая практика для этой проблемы?

4b9b3361

Ответ 1

Теоретически, ничто не мешает вам отправить тело запроса в запросе GET. Протокол HTTP позволяет это, но не имеет определенной семантики, так что вы можете задокументировать, что именно произойдет, когда клиент отправит полезную нагрузку GET. Например, вы должны определить, эквивалентны ли параметры в теле JSON параметрам строки запроса или чему-то еще.

Однако, поскольку нет четко определенной семантики, у вас нет гарантии, что реализации между вашим приложением и клиентом будут уважать его. Сервер или прокси-сервер могут отклонить весь запрос или игнорировать тело или что-либо еще. Лучший способ справиться со сломанными реализациями - это обойти его так, чтобы отделить его от вашего приложения, поэтому я бы сказал, что у вас есть два варианта, которые можно считать наилучшими практиками.

Простой вариант - использовать POST вместо GET, как рекомендовано другими ответами. Поскольку POST не стандартизирован по HTTP, вам придется документировать, как именно это должно работать.

Другой вариант, который я предпочитаю, это реализовать ваше приложение, предполагая, что полезная нагрузка GET никогда не изменяется. Затем, если что-то имеет неработающую реализацию, вы разрешаете клиентам переопределять метод HTTP с помощью X-HTTP-Method-Override, который является популярным соглашением для клиентов эмулировать методы HTTP с помощью POST. Таким образом, если у клиента неправильная реализация, он может написать запрос GET как POST, отправив метод X-HTTP-Method-Override: GET, и вы можете получить промежуточное программное обеспечение, которое отделено от реализации вашего приложения и переписывает метод соответствующим образом. Это лучший вариант, если вы пурист.

Ответ 2

Чтобы ответить на ваш вопрос, да, вы можете передать JSON в URI как часть запроса GET (при условии URL-кодирования). Однако, учитывая, что ваша причина для этого связана с длиной URI, использование JSON будет самонадеянным (введение большего количества символов, чем требуется).

Я предлагаю вам отправить свои параметры в тело запроса POST, либо в обычном стиле CGI (param1=val1&param2=val2), либо в JSON (проанализированном вашим API при получении)