Ответ
HTTP метод PUT используется для полного обновления существующего ресурса или создания нового ресурса, если он не существует, по указанному URI. Он отправляет полную репрезентацию ресурса на сервер.
Основные характеристики и применение:
- Полное обновление: В отличие от
PATCH, который изменяет только часть ресурса,PUTзаменяет весь ресурс целиком. Если в теле запроса отсутствуют какие-либо поля существующего ресурса, они будут удалены или сброшены до значений по умолчанию. - Создание ресурса: Если ресурс по указанному URI не существует,
PUTможет использоваться для его создания. Клиент сам определяет URI нового ресурса. - Идемпотентность:
PUTявляется идемпотентным методом. Это означает, что многократное выполнение одного и того жеPUTзапроса приведет к одному и тому же состоянию на сервере, без дополнительных побочных эффектов. Это делает его безопасным для повторных попыток.
Примеры использования:
- Обновление профиля пользователя: Если у вас есть ресурс
/users/123, и вы хотите обновить все данные пользователя, вы отправляетеPUTзапрос с полным JSON-объектом пользователя. - Создание файла по известному пути: Загрузка файла на сервер по конкретному пути, например,
/files/document.pdf.
Пример HTTP PUT запроса (с использованием Python requests):
import requests
# Предположим, у нас есть пользователь с ID 1
user_id = 1
api_url = f'https://api.example.com/users/{user_id}'
# Данные для полного обновления пользователя
updated_data = {
'name': 'Jane Doe',
'email': 'jane.doe@example.com',
'age': 35
}
# Отправка PUT запроса
response = requests.put(api_url, json=updated_data)
if response.status_code == 200: # OK
print(f"Ресурс {api_url} успешно обновлен.")
print(response.json())
elif response.status_code == 201: # Created
print(f"Ресурс {api_url} успешно создан.")
print(response.json())
else:
print(f"Ошибка при выполнении PUT запроса: {response.status_code}")
print(response.text)
Ожидаемые HTTP статусы:
200 OKили204 No Content: Ресурс успешно обновлен.201 Created: Ресурс успешно создан (если его не существовало).400 Bad Request: Некорректные данные в запросе.404 Not Found: Ресурс не найден (если сервер не поддерживает создание через PUT).
Ответ 18+ 🔞
А, вот эта штука, PUT, да? Ну, слушай, сейчас разжую, как есть.
Представь себе, у тебя есть анкета в паспортном столе, вся заполненная. И ты приносишь им целиком новую бланчину, где всё переписано — и имя, и прописка, и даже фотка другая. Старую — нахуй в мусорку, эту — в дело. Вот это и есть PUT, блядь. Полная замена, от и до. Никаких «ой, а давайте только фамилию исправим». Нет, сука, всё по новой!
А если в этом самом паспортном столе на полке с твоим номером пусто? Ну, окей, они твой новый бланк туда и положат. Создадут, короче. Сам сказал, куда класть — они и положили. Удобно, ёпта.
И главная его фишка — он идемпотентный. Это умное слово значит, что если ты десять раз подряд притащишь один и тот же бланк, в итоге на полке будет лежать ровно он, а не десять копий. Не накосячишь. Для автоматических повторов — то, что надо.
Где это применить, спросишь? Да везде, где надо целиком перетряхнуть запись. Профиль юзера на сайте обновил, файл на сервере по точному пути залил — везде PUT рулит.
Вот, смотри, как на питоне это выглядит, если не боишься кода:
import requests
# Допустим, мужика с айдишником 1 надо переписать
user_id = 1
api_url = f'https://api.example.com/users/{user_id}'
# Всё, что о нём знаем теперь. ВСЁ, Карл! Старое — не в счёт.
updated_data = {
'name': 'Jane Doe',
'email': 'jane.doe@example.com',
'age': 35
}
# Летит наш PUT-запрос, как кирпич в окно
response = requests.put(api_url, json=updated_data)
if response.status_code == 200: # Всё гуд, обновили
print(f"Ресурс {api_url} успешно обновлен.")
print(response.json())
elif response.status_code == 201: # О, а его и не было! Создали!
print(f"Ресурс {api_url} успешно создан.")
print(response.json())
else:
print(f"Ошибка при выполнении PUT запроса: {response.status_code}")
print(response.text) # Тут сервер обычно матерится, что не так
А сервер тебе в ответ такие статусы швырнёт:
200 OKили204 No Content— принято, братан, заменил твой ресурс, можешь идти.201 Created— охуенно! На пустом месте создал, молодец.400 Bad Request— ты мне какую-то хуйню прислал, переделывай.404 Not Found— а менять-то нечего, пути такого нет (если создавать через PUT нельзя).
Вот и вся магия. Не PATCH, где ковыряешься, как в носу, а разом — хоба! — и новый ресурс. Красиво, блядь.