Что такое PATCH

«Что такое PATCH» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PATCH — это HTTP-метод для частичного обновления ресурса. В отличие от PUT, который заменяет ресурс целиком, PATCH позволяет изменять только указанные поля.

Пример на Go (с использованием net/http):

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

func updateUser(w http.ResponseWriter, r *http.Request) {
    if r.Method != "PATCH" {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }

    var updates User
    if err := json.NewDecoder(r.Body).Decode(&updates); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // Применяем только переданные поля (например, обновляем имя, если оно есть)
    if updates.Name != "" {
        currentUser.Name = updates.Name
    }
    // Аналогично для других полей...
}

Нюансы:

  • Идемпотентность не гарантируется (в отличие от PUT).
  • Сервер должен корректно обрабатывать частичные данные.
  • Часто используется с Content-Type: application/json-patch+json для формата JSON Patch (RFC 6902).