Какие HTTP-методы REST используются для обновления ресурса и в чем их различие?

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

Ответ

Для обновления ресурса в REST API используются методы PUT и PATCH.

PUT (Полное обновление)

  • Семантика: «Заменить ресурс целиком» данными из запроса.
  • Идемпотентность: Да. Многократный одинаковый PUT-запрос дает тот же результат.
  • Использование: Клиент должен отправить полное представление ресурса, даже для неизменяемых полей.

Пример PUT в Spring Boot:

@PutMapping("/books/{id}")
public ResponseEntity<Book> updateBook(
        @PathVariable Long id,
        @RequestBody Book updatedBook) {
    // Заменяем весь ресурс с указанным ID данными из updatedBook
    Book savedBook = bookService.saveOrUpdate(id, updatedBook);
    return ResponseEntity.ok(savedBook);
}

PATCH (Частичное обновление)

  • Семантика: «Применить частичные модификации к ресурсу».
  • Идемпотентность: Не гарантирована (зависит от формата запроса, например, JSON Patch идемпотентен).
  • Использование: Клиент отправляет только изменяемые поля или набор операций для изменения.

Пример PATCH (обновление одного поля) в Spring Boot:

@PatchMapping("/books/{id}/title")
public ResponseEntity<Void> updateBookTitle(
        @PathVariable Long id,
        @RequestParam String newTitle) {
    bookService.updateTitle(id, newTitle);
    return ResponseEntity.noContent().build();
}

Ключевое отличие: PUT обновляет ресурс полностью, PATCHчастично. Выбор зависит от требований API и желаемой семантики.