← Назад к вопросам

Что такое PUT в REST?

1.0 Junior🔥 241 комментариев
#Веб-тестирование#Тестирование API

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое PUT в REST

PUT — это один из основных HTTP методов, используемый в RESTful API для замены существующего ресурса целиком или для создания ресурса с указанным идентификатором, если он не существует.

Основные характеристики PUT

Семантика:

  • PUT обновляет или создаёт ресурс по полному пути (URL)
  • Замещает весь ресурс новыми данными
  • Идемпотентный — повторное выполнение даёт тот же результат

Структура запроса:

PUT /api/v1/users/123 HTTP/1.1
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com",
  "age": 30
}

Типичные HTTP статус-коды ответов:

  • 200 OK — ресурс успешно обновлён и возвращён в ответе
  • 201 Created — новый ресурс успешно создан
  • 204 No Content — ресурс обновлён, содержимое не возвращается
  • 400 Bad Request — некорректные данные в теле запроса
  • 404 Not Found — ресурс не найден
  • 409 Conflict — конфликт версий или состояния

PUT vs PATCH

Это наиболее часто путаемые методы. Вот ключевые различия:

PUT — полное обновление:

  • Заменяет ВСЕ поля ресурса
  • Если не указано поле, оно может быть обнулено или удалено
  • Требует полное представление ресурса
  • Пример: PUT /users/123 требует все поля (name, email, age, etc.)

PATCH — частичное обновление:

  • Обновляет только указанные поля
  • Остальные поля остаются без изменений
  • Более гибкий и безопасный
  • Пример: PATCH /users/123 может содержать только {"email": "newemail@example.com"}

Практический пример

Исходный ресурс:

{
  "id": 123,
  "name": "John",
  "email": "john@example.com",
  "phone": "+1234567890"
}

PUT запрос (полное обновление):

PUT /api/v1/users/123
{
  "name": "Jane",
  "email": "jane@example.com"
}

Результат: phone будет удалён (в зависимости от реализации), остаются только name и email.

PATCH запрос (частичное обновление):

PATCH /api/v1/users/123
{
  "email": "jane@example.com"
}

Результат: обновляется только email, остальные поля сохраняются.

Важные свойства PUT

Идемпотентность: Повторный PUT запрос с теми же данными даёт тот же результат. Это критично для надёжности и retry логики.

Первый PUT → 200 OK, ресурс обновлён
Второй PUT (с теми же данными) → 200 OK, тот же результат

Отличие от POST:

  • POST создаёт новый ресурс, сервер генерирует ID
  • PUT создаёт ресурс с клиентом-указанным ID или обновляет существующий

Когда использовать PUT

Использовать PUT для:

  • Обновления существующего ресурса полностью
  • Замены конфигурации или состояния
  • Операций, которые должны быть идемпотентными
  • Загрузки файлов на сервер (например, PUT /files/document.pdf)

Не использовать PUT для:

  • Частичных обновлений (используй PATCH)
  • Создания новых ресурсов с генерируемым ID (используй POST)
  • Действий и операций (используй POST)

Тестирование PUT в тестовых фреймворках

Пример на REST Assured:

restAssured
  .given()
    .contentType(ContentType.JSON)
    .body(userPayload)
  .when()
    .put("/api/v1/users/123")
  .then()
    .statusCode(200)
    .body("name", equalTo("Jane"))
    .body("email", equalTo("jane@example.com"));

Пример на Pytest:

response = client.put("/api/v1/users/123", json=payload)
assert response.status_code == 200
assert response.json()["name"] == "Jane"

Лучшие практики при тестировании PUT

  • Проверяй полное обновление всех указанных полей
  • Убедись, что необновленные поля сохранены корректно
  • Тестируй попытку обновления несуществующего ресурса (404)
  • Проверяй валидацию данных в теле запроса
  • Тестируй идемпотентность — отправь два идентичных запроса
  • Проверяй права доступа (401, 403)
  • Убедись, что обновляются правильные поля (проверь в БД)

PUT — это мощный метод для надёжного и предсказуемого обновления ресурсов в RESTful API благодаря своей идемпотентности и полной семантике замены.

Что такое PUT в REST? | PrepBro