Чем метод PATCH от PUT отличается?

Аватар пользователя Nikolai Gagarinov
Nikolai Gagarinov
2 дня назад

Это частый вопрос на собеседованиях. Отличаются они вот чем:

  • PUT – заменяет весь ресурс новым (если поле не указано — оно затирается).
  • PATCH – изменяет только указанные поля (частичное обновление).

Допустим, у нас есть ресурс юзера:

{
  "id": 1,
  "name": "Alice",
  "email": "alice@mail.com"
}

PUT

Запрос:

curl -X PUT http://localhost:8080/users/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Bob"
  }'

Результат: ресурс перезапишется полностью, email пропадёт (если сервер не подставляет старое значение сам).

{
  "id": 1,
  "name": "Bob",
  "email": null
}

PATCH

Запрос:

curl -X PATCH http://localhost:8080/users/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Bob"
  }'

Результат: изменится только name, остальные поля останутся.

{
  "id": 1,
  "name": "Bob",
  "email": "alice@mail.com"
}

Пример с корзиной:

Исходный ресурс корзины:

{
  "id": 10,
  "items": [
    { "productId": 100, "qty": 1 },
    { "productId": 200, "qty": 2 }
  ]
}

PUT

curl -X PUT http://localhost:8080/carts/10 \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "productId": 100, "qty": 5 }
    ]
  }'

Результат: корзина заменена полностью, второй товар пропал.

{
  "id": 10,
  "items": [
    { "productId": 100, "qty": 5 }
  ]
}

PATCH

curl -X PATCH http://localhost:8080/carts/10 \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "productId": 100, "qty": 5 }
    ]
  }'

Результат: изменилось только количество у товара 100, остальные товары остались.

{
  "id": 10,
  "items": [
    { "productId": 100, "qty": 5 },
    { "productId": 200, "qty": 2 }
  ]
}
0 0
Пройдите курс по программированию бесплатно
Поможем с выбором
Если у вас есть вопросы о формате или вы не знаете, что выбрать, оставьте свой номер — мы позвоним и ответим на все вопросы
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»