В чем принципиальное различие между PUT и PATCH? 🔭

PUT и PATCH - это HTTP-методы для обновления ресурсов, но с принципиально разными подходами к модификации данных согласно стандарту RFC 9110.

Семантическое различие

🔘 PUT означает «замену состояния ресурса»: клиент определяет полное состояние, сервер заменяет текущее состояние на переданное. 🔘 PATCH означает «частичное изменение»: клиент инструктирует сервер об изменениях, сервер применяет эти изменения к существующему состоянию.

Что происходит после PUT? 🤔

После успешного PUT-запроса GET должен вернуть точно такое же представление ресурса, которое было отправлено. Все неуказанные в запросе поля должны быть установлены в значение по умолчанию или удалены.

Где в стандарте искать про PATCH? 📖

В RFC 9110 метод PATCH прямо упоминается в разделе 14.5 «Partial PUT»🔻

Partial resource updates are also possible… by using a different method that has been specifically defined for partial updates (for example, the PATCH method defined in [RFC5789]).

Это ключевой момент! PATCH - это специально определённый метод для частичных обновлений (описанный в RFC 5789), в то время как частичные обновления через PUT (с заголовком Content-Range) - это нестандартное расширение с нестабильной поддержкой.

Проблемы при использовании PUT для частичных обновлений ⚠️

⭕️ Это нарушает контракт. Клиент ожидает, что GET вернёт то же, что было отправлено. ⭕️ Может привести к потере данных, так как неуказанные поля могут быть удалены. ⭕️ Приводит к неожиданному поведению, поскольку сервер может интерпретировать отсутствующие поля как намерение их удалить. ⭕️ Создает проблемы с кэшированием. PUT инвалидирует кэш, тогда как PATCH может быть более эффективным.

Когда использовать PUT? 🎯

✔️ Для создания нового ресурса с известным ID (клиент обладает достаточной информацией, чтобы сконструировать полный URL будущего ресурса до отправки запроса). ✔️ Для полной замены существующего ресурса. ✔️ Когда нужно гарантировать целостность данных. ✔️ Когда клиент знает полное состояние ресурса.

Когда использовать PATCH? 🎯

✔️ Для обновления отдельных полей ресурса. ✔️ Когда необходимо сохранить существующие, неуказанные поля. ✔️ Для оптимизации трафика при небольших изменениях. ✔️ Когда изменения атомарны и независимы. ✔️ Всегда, когда нужно сделать именно частичное обновление. Для этого метод и создан!

Практические рекомендации 📝

🔘 При реализации PUT сервер должен проверять, что запрос содержит полное представление ресурса со всеми обязательными полями, и полностью заменять ресурс. 🔘 При реализации PATCH сервер получает существующий ресурс и применяет к нему только те изменения, которые указаны в запросе.

Буду ждать интересные комментарии 🤝 #http #put #patch

В чем принципиальное различие между PUT и PATCH? 🔭 | Сетка — социальная сеть от hh.ru В чем принципиальное различие между PUT и PATCH? 🔭 | Сетка — социальная сеть от hh.ru