Ответ
Да, метод PATCH предназначен именно для частичного обновления ресурса. Это позволяет изменять одно или несколько полей, в том числе разных типов, в рамках одного запроса, не передавая объект целиком.
Принцип работы:
Клиент отправляет на сервер только те поля, которые необходимо изменить. Сервер применяет эти изменения к существующему ресурсу, оставляя остальные поля нетронутыми. Это снижает объем передаваемых данных по сравнению с PUT.
Пример на Python с requests:
Предположим, нужно обновить имя пользователя и его статус активности.
import requests
import json
# URI конкретного ресурса
url = 'https://api.example.com/users/123'
# Данные для частичного обновления
payload = {
'full_name': 'John Doe', # string
'is_active': False # boolean
}
headers = {'Content-Type': 'application/json'}
response = requests.patch(url, data=json.dumps(payload), headers=headers)
print(response.status_code)
print(response.json())
Ключевые моменты:
- Цель: Частичное обновление. Идеально для изменения 1-2 полей в большом объекте.
- Идемпотентность:
PATCHне является идемпотентным по своей природе, в отличие отPUT, так как результат повторного запроса может отличаться (например, если операция — инкремент значения). - Формат: Для сложных операций (добавление в массив, удаление поля) часто используется стандарт JSON Patch (RFC 6902) с Content-Type
application/json-patch+json.
Ответ 18+ 🔞
Смотри, вот тебе как есть, без прикрас. PATCH — это когда тебе надо не всю хрень переписывать, а только один кусок. Представь, что у тебя есть пользователь, и ты хочешь ему только имя поменять, а не весь паспорт заново выписывать. Вот для этого он и нужен.
Как это работает, если по-простому: Ты шлёшь на сервер только те поля, которые надо поменять. Сервер смотрит, берёт эти новые значения и аккуратно вставляет их на место старых. Всё остальное остаётся как было. Это как заплатку на штаны наложить, а не новые покупать.
Вот тебе пример на Python, чтобы было совсем понятно:
Допустим, у нас есть юзер с id 123, и мы хотим ему обновить имя и выключить активность.
import requests
import json
# Адрес конкретного чувака
url = 'https://api.example.com/users/123'
# То, что мы хотим поменять. Только это и ничего больше.
payload = {
'full_name': 'John Doe', # Это строка
'is_active': False # А это булево значение, да-нет
}
headers = {'Content-Type': 'application/json'}
# Отправляем заплаточку
response = requests.patch(url, data=json.dumps(payload), headers=headers)
print(response.status_code)
print(response.json())
Важные нюансы, чтобы не облажаться:
- Суть: Частичное обновление. Идеально, когда объект большой, как слон, а менять надо только хобот.
- Идемпотентность: А вот тут, блядь, интересно.
PATCHпо умолчанию не идемпотентный, в отличие отPUT. Если ты два раза подряд отправишь один и тот жеPATCH, который, например, увеличивает счётчик, то счётчик увеличится дважды. Пиздец, да? Поэтому смотри в документацию API, что они там себе позволяют. - Формат: Если тебе нужно не просто заменить значение, а сделать что-то хитрое — добавить элемент в массив, удалить поле — то умные дядьки придумали стандарт JSON Patch (RFC 6902). Для него нужно ставить специальный заголовок
Content-Type: application/json-patch+json. Но это уже высший пилотаж, для начала хватит и обычного подхода.