Как с помощью HTTP-метода PATCH обновить несколько полей одного ресурса

«Как с помощью HTTP-метода PATCH обновить несколько полей одного ресурса» — вопрос из категории Сети, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, метод 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.