Задать вопрос
@Starvings

Принципиальное отличие POST, PATCH и их реализация?

Реализовываю api и хочется сделать это наиболее корректно. Возник вопрос про отличая в реализации POST, PATCH. После того, как более детально загуглил вопросов стало еще больше.
Я понимаю, что PATCH для изменения малого, PUT многого, POST для создания новой записи.

Но не понимаю практическое применение.
1. В PATCH технически можно передавать больше 1 значения на изменение. Правильно ли это? Судя по найденной информации - нет, через PATCH может быть изменен только 1 метод. Если мне надо передать в запросе на обновление 2-3-4 параметра, то это уже PUT?

2. Фактическое отличие между всеми тремя методами лишь в том, что в POST и PATCH добавляется @PathVariable.

Подскажите, пожалуйста на сколько я прав или все же ошибаюсь?
  • Вопрос задан
  • 49 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
1. В PATCH технически можно передавать больше 1 значения на изменение. Правильно ли это?

См Json patch
https://en.wikipedia.org/wiki/JSON_Patch
Вообще RFC не обязывает тебя использовать именно json patch, а потому и нельзя сказать, можно ли передать больше одного значения. Это всё на усмотрение разработчика.

2. Фактическое отличие между всеми тремя методами лишь в том

Различие только в том что они предназначены для разного и "разное" лучше черпать из спецификации HTTP.
https://www.ietf.org/rfc/rfc9110.html
POST: https://www.ietf.org/rfc/rfc9110.html#name-post
кратко - можно использовать для всего что не GET.
В теле передаётся что угодно, в зависимости от назначения.

PUT: https://www.ietf.org/rfc/rfc9110.html#name-put
кратко - полная перезапись ресурса (из-за этого этот метод идемпотентен)
В теле передаётся весь ресурс целиком.

PATCH: про него отдельный rfc https://www.ietf.org/rfc/rfc5789.html
кратко - для частичной модификации ресурса (как конкретно будет производиться модификация - это уже детали реализации. Можно использовать уже упомянутый json patch, можно что попроще или просто другое, но из-за такой гибкости он является неидемпотентным).
В теле передаётся описание того, как нужно модифицировать ресурс.

PathVariable тут вообще никаким боком не стоит. Хочешь - добавляй, не хочешь - не добавляй.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Классически:
POST - создание нового ресурса. Передаются все обязательные поля и любые необязательные.
PUT - полное обновление ресурса. Передаётся идентификатор ресурса, все обязательные поля и любые необязательные.
PATH - модификация ресурса. Передаётся идентификатор ресурса и обновляемые поля.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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