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