Get предназначен для получения данных
Вопрос почему лучше использовать get /product/id вместо get /product с телом запрос { id: 1 }
Ответов множество
1) Архитектурный, во втором примере получается, что адрес получаемой информации мы делим на 2 части, что является лапшой
2) Нам сложнее описать кеширующий\редирект сервер, потому что в первом случае мы можем отдавать кеш\редирект только по адресу, во втором нам нужно будет парсить боди. В моем примере кода для парсинга тела даже пришлось подключать бибилоитеки и увеличивать размер итогового сервера.
3) Непреемственный подход, единообразие сетевого интрерфейса, подавляющее большинство доки именно в таком стиле, где адрес получаемой инфы будет полностью находиться в URI. И это касается не только GET запросов, но и всех остальеых - адрес должен быть в параметрах, а "посылка" в боди. Написать post c боди { id: 1, newModelData: {} } ровно также плохо
Но никаких технических ограничений на боди при гет запросе нет, в моем экзампле я взял один из популярных http серверов и показал это. Если взять другие, то будет ровно тот же результат.
То, что там где-то какой-то админ что-то реализовал это его частный случай и не более.
Обычно (правильно) использовать валидаторы для запросов и таких проблем быть просто не может.