В чем принципиальное различие между 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 сервер получает существующий ресурс и применяет к нему только те изменения, которые указаны в запросе.
· 11.01
На практике часто юзаем patch и post, put встречается очень редко 😌
ответить
коммент удалён
· 11.01
💪🏻
ответить
ответ удалён