Ответ
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).