Что такое HTTP-метод PUT?

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

Ответ

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

Ключевые характеристики:

  • Идемпотентность: Многократный один и тот же PUT-запрос дает тот же результат, что и один запрос.
  • Полная замена: Тело запроса должно содержать все атрибуты ресурса. Отсутствующие поля могут быть интерпретированы как null или удалены.
  • URI указывает ресурс: URI в запросе идентифицирует ресурс, который будет создан или заменен.

Пример на Swift (URLSession):

struct User: Codable {
    let id: Int
    var name: String
    var email: String
}

func updateUser(_ user: User) {
    guard let url = URL(string: "https://api.example.com/users/(user.id)") else { return }
    var request = URLRequest(url: url)
    request.httpMethod = "PUT"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

    do {
        request.httpBody = try JSONEncoder().encode(user)
    } catch {
        print("Failed to encode user: (error)")
        return
    }

    URLSession.shared.dataTask(with: request) { data, response, error in
        // Обработка ответа (обычно 200 OK или 204 No Content при успехе)
        if let httpResponse = response as? HTTPURLResponse {
            print("Status code: (httpResponse.statusCode)")
        }
    }.resume()
}
PUT vs POST vs PATCH: Метод Идемпотентность Назначение Тело запроса
POST Нет Создание ресурса (URI часто определяется сервером) Данные для нового ресурса
PUT Да Полная замена ресурса по известному URI Полное представление ресурса
PATCH Нет* Частичное обновление ресурса Только изменяемые поля (например, в формате JSON Patch)

*PATCH может быть сделан идемпотентным, если используется семантика "замены" (например, JSON Patch replace).