Когда используется HTTP PUT запрос?

Ответ

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).