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

В чем разница между POST и PUT?

1.6 Junior🔥 291 комментариев
#REST API и HTTP

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

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

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

Разница между POST и PUT

ПОСТ и PUT — это два разных HTTP метода, и хотя оба отправляют данные на сервер, они используются в совершенно разных сценариях.

POST — Создание нового ресурса

ПОСТ используется для отправки данных, которые изменяют состояние сервера. Обычно это создание нового ресурса.

import requests

# Создание новой записи
response = requests.post(
    "https://api.example.com/users",
    json={
        "name": "Ivan Petrov",
        "email": "ivan@example.com"
    }
)
# Response: 201 Created
# {
#   "id": 123,
#   "name": "Ivan Petrov",
#   "email": "ivan@example.com"
# }

Важные свойства POST:

  • Не идемпотентен: несколько одинаковых запросов создадут несколько ресурсов
  • Создает новый ресурс: каждый вызов добавляет что-то новое
  • Обычно возвращает 201 Created или 200 OK
  • URL обычно указывает коллекцию (/users), а не конкретный ресурс

PUT — Полное обновление существующего ресурса

ПУТ используется для замены (обновления) существующего ресурса целиком.

# Полное обновление существующего пользователя
response = requests.put(
    "https://api.example.com/users/123",
    json={
        "name": "Ivan Sidorov",
        "email": "ivan.new@example.com"
    }
)
# Response: 200 OK или 204 No Content

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

  • Идемпотентен: несколько одинаковых запросов дадут одинаковый результат
  • Полная замена: отправляет полный объект, не частичное обновление
  • URL указывает конкретный ресурс: /users/123
  • Обычно возвращает 200 OK или 204 No Content

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

# === POST ===
# Запрос 1: Создаем новый пост
response1 = requests.post(
    "https://api.example.com/posts",
    json={"title": "My Post", "content": "Hello"}
)
print(response1.json())  # {"id": 1, "title": "My Post", ...}

# Запрос 2: Повторяем тот же запрос
response2 = requests.post(
    "https://api.example.com/posts",
    json={"title": "My Post", "content": "Hello"}
)
print(response2.json())  # {"id": 2, "title": "My Post", ...}
# Создались ДВА разных поста!

# === PUT ===
# Запрос 1: Обновляем пост с id=1
response1 = requests.put(
    "https://api.example.com/posts/1",
    json={"title": "Updated Title", "content": "Updated Content"}
)
print(response1.json())  # {"id": 1, "title": "Updated Title", ...}

# Запрос 2: Повторяем тот же запрос
response2 = requests.put(
    "https://api.example.com/posts/1",
    json={"title": "Updated Title", "content": "Updated Content"}
)
print(response2.json())  # {"id": 1, "title": "Updated Title", ...}
# Пост остался БЕЗ ИЗМЕНЕНИЙ (идемпотентно)

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

Есть также PATCH — для частичного обновления:

# Обновляем только название, email остается прежним
response = requests.patch(
    "https://api.example.com/users/123",
    json={"name": "New Name"}  # Только это поле
)

Сравнительная таблица

СвойствоPOSTPUTPATCH
Создание новой записиДаНетНет
Обновление существующейНетДаДа
ИдемпотентностьНетДаОбычно нет
Требует ID ресурсаНетДаДа
Полное обновлениеN/AДаНет
Код ответа201/200200/204200/204

Правила использования в REST API

# POST — создание
POST /api/v1/users            # Создать пользователя
POST /api/v1/users/123/comments  # Создать комментарий к пользователю

# GET — получение
GET /api/v1/users             # Получить всех
GET /api/v1/users/123         # Получить одного

# PUT — полное обновление
PUT /api/v1/users/123         # Обновить всего пользователя

# PATCH — частичное обновление
PATCH /api/v1/users/123       # Обновить части пользователя

# DELETE — удаление
DELETE /api/v1/users/123      # Удалить пользователя

Резюме

Используй POST когда нужно создать новую запись и каждый запрос должен создавать новую.

Используй PUT когда нужно обновить существующую запись полностью и операция должна быть идемпотентной.

Используй PATCH когда нужно обновить только некоторые поля существующей записи.

В чем разница между POST и PUT? | PrepBro