@hax
junior developer

Когда мы должны использовать Query, а когда Body в HTTP?

Всем привет. Подскажите, пожалуйста, есть ли какие-то ограничения в спецификации HTTP / REST, которые устанавливают ограничение на использование Query или Body?

Например, браузер не позволяет отправить GET запрос с Body параметрами, а что насчёт остальных методов? Могу ли я, например, юзать POST/PUT/PATCH/DELETE с Query запросом (если там нет секретных данных, типо паролей)? И что лучше выбрать во время разработки архитектуры API? Есть ли какая-то документация, которая явно говорит, что нужно юзать Body с такими-то методами, Query - с такими-то?

UPD. Вспомнил ещё три вопроса:
1) можем ли мы использовать глаголы в роутингах? Типа /users/password/reset?
2) этот вопрос связан с разницой PUT и PATCH. Например, я хочу заапдейтить пароль у юзера.
Есть ли разница между этими двумя роутингами: PATCH /user или лучше PUT /user/password ?
3) должны ли мы всегда использовать множественное число в названии коллекций?
Например есть метод GET /user-management/users, который вернёт список ВСЕХ юзеров. А есть метод DELETE /user-management/user?id=123, который удалит только ОДНОГО юзера. Вопрос такой: надо ли изменить API удаления на /user-management/userS или можно оставить как есть?
  • Вопрос задан
  • 8599 просмотров
Пригласить эксперта
Ответы на вопрос 2
IDONTSUDO
@IDONTSUDO
ЧСВ программистов идет в комплекте с первой IDE.
Сама концепция REST настолько размыта, что стандартного ответа на ваш вопрос нету. То что вы используйте и видите это чаще всего не REST в том академическом плане в каком он был создал.

Вот хорошее мнение на этот счет. Но я ни где не находил его подтверждения.
https://habr.com/ru/company/yandex/blog/265569/
Ответ написан
Комментировать
@galliard
На самом деле все предельно просто.

URL является частным случаем URI, который в свою очередь расшифровывается как "Uniform Resource Identifier". То есть это в первую очередь идентификатор ресурса. По нему мы находим ресурс, обращаемся к ресурсу, отличаем его от других ресурсов.

Query же, это такая же часть URI, как и host или path, и так же принимает участие в идентификации ресурса.

В Body же как раз содержатся данные, отправляемые ресурсу на обработку. Потому в GET запросах и нет тела, так как запрашивая данные ты не отправляешь никаких данных на обработку, но тебе нужно четко идентифицировать тот ресурс, от которого ты хочешь эти данные получить. А идентифицируешь ты его при помощи url, в том числе query, если нужно.

PATCH /user или PUT /user/password значения не имеет, но обычно разработчикам день программировать новые эндпоинты, поэтому используют более общий PATCH /user.

Коллекция - это некое множество объектов, поэтому логично что множество описывается в множественном числе.

Можно ли использовать глаголы? Ну смотря о чем вы говорите, о HTTP или о REST. В HTTP вы можете использовать глаголы, прилагательные, местоимения, причастия, предлоги и вообще любой набор символов в любой последовательности. В то время как REST - это парадигма работы с представлениями объектов. А объект глаголом быть не может.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы