Я скептически отношусь к использованию полезной нагрузки JSON в GET-запросе.
Ваш скептицизм оправдан;Вот что говорит HTTP-спецификация о GET
Полезная нагрузка в сообщении запроса GET не имеет определенной семантики
Попытка использовать неопределенное поведениеплохая идея.
Пожалуйста, предложите лучшую практику в мире REST.
Важно признать, что URI являются идентификаторами ;тот факт, что мы иногда используем удобочитаемые идентификаторы человека (известный как взломанный URI ), является удобством, а не требованием.
Таким образом, вместо списка системных идентификаторов, URI также легкохеш-дайджест списка системных идентификаторов (который вероятно будет уникальным).
Таким образом, ваш запрос клиента будет, возможно,
GET /ea3279f1d71ee1e99249c555f3f8a8a8f50cd2b724bb7c1d04733d43d734755b
Конечнохеш не является обратимым - если еще нет соглашения о том, что означает этот URI, то мы застряли.Итак, где-то в протоколе, нам нужно сделать запрос к серверу, который включает список, чтобы сервер мог его сохранить.«Магазин» - это большой намек на то, что нам понадобится небезопасный метод.Два кандидата, которых я ожидаю увидеть здесь: POST или PUT .
Способ мышления о том, что происходит, заключается в том, что у вас есть один ресурс с двумя разными представлениями - представление «запрос» и представление «ответ».С помощью PUT и POST вы доставляете на сервер представление запроса, а с помощью GET вы получаете представление ответа (для аналога рассмотрим формы HTML - мы отправляем представления application / x-www-form-urlencoded на сервер, нопредставления, которые мы ПОЛУЧАЕМ, обычно дружелюбнее).
Разрешение клиенту самостоятельно рассчитать URI и отправить ему сообщение - это немного RPC-иш.То, что вы обычно делаете в REST API , - это документирование протокола с известным начальным местом (так называемая закладка) и последовательностью ссылок, которым нужно следовать.
(Примечание: многие вещи помечены как "REST API ", что ж, это не так. Если это не похоже на человека, который перемещается по веб-сайту с помощью браузера, это, вероятно, не" REST ". Это отлично ; не вседолжен быть.)
Но я считаю, что POST или PUT предназначены для некоторых запросов, которые изменяют данные.Это хорошая идея, чтобы использовать запросы запросов с ними?
Нет, это не так ... но они идеально подходят для создания новых ресурсов .Затем вы можете сделать безопасные вызовы GET, чтобы получить текущее представление ресурса.
REST (и, конечно, HTTP) оптимизированы для общего случая в Интернете: крупномасштабная гипермедиа, кэширование и все такое хорошее.За это страдают различные варианты использования, один из которых - переходное сообщение с безопасной семантикой и полезной нагрузкой.
TL; DR: если у вас нет одного из вариантов использования, для которого предназначен HTTPиспользуйте POST - и примите к сведению тот факт, что вы на самом деле не используете всю мощь HTTP.Или используйте другое приложение - у вас нет для использования HTTP, если он плохо подходит.